Как получить DPI файла PDF? - PullRequest
0 голосов
/ 24 апреля 2018

Используя imagemagick, GhostScript или любой другой PHP-код, как я могу получить значение DPI для PDF-файлов? Вот ссылка на два демонстрационных файла http://jmp.sh/O5g5wL4 - 72 DPI http://jmp.sh/RxrnYrY - 300 DPI

Я использовал

   $image = new Imagick();
   $image->readImage('xyz.pdf');
   $resolutions = $image->getImageResolution();

Это дает одинаковый результат для двух разных файлов PDF, имеющих разные DPI.

Я также использовал

pdfimages -list xyz.pdf

Это дает список всей информации, но как извлечь значение DPI из списка.

Как получить точное значение DPI для PDF?

1 Ответ

0 голосов
/ 24 апреля 2018

Как говорит fmw42, сами файлы PDF не имеют разрешения. Однако в вашем случае оба файла состоят только из изображения. В одном случае размер изображения составляет ~ 48 МБ, а в другом - около 200 МБ.

Причина в том, что изображения имеют разное эффективное разрешение.

В PDF изображение - это просто растровое изображение, последовательность цветных пикселей. Они тогда оттянуты на основной носитель. На данный момент нет разрешения, пиксели устанавливаются в определенный размер носителя. В вашем случае 22 дюйма на 82 дюйма.

Эффективное разрешение определяется путем деления размера на количество пикселей в изображении в этом измерении.

Итак, если у меня есть изображение размером 1000x1000 пикселей, и я рисую его в квадрате 1 дюйм, то эффективное разрешение изображения составляет 1000 точек на дюйм. Если я передумаю и нарисую его в квадрате 4 дюйма на 4 дюйма, то эффективное разрешение будет 250 dpi.

Изображение не изменилось, только область, которую он покрывает.

Теперь рассмотрим, у меня есть два изображения, нарисованные в квадратах 1 дюйм. первое изображение 1000x1000, второе 500x500. Эффективное разрешение первого изображения составляет 1000 точек на дюйм, эффективное разрешение второго - 500 точек на дюйм.

Таким образом, вы можете видеть, что в PDF эффективное разрешение изображения представляет собой комбинацию размеров изображения и размеров носителя, который оно покрывает.

Это сложно измерить в PDF-файле. Охватываемая площадь рассчитывается с использованием матричной алгебры и может представлять собой комбинацию нескольких различных матриц.

Фактические размеры изображения, напротив, довольно легко определить, они приведены в словаре изображений. Ваши изображения: 1620x5868 и 3372x12225. В обоих случаях носители имеют одинаковый размер; 22,5х81,5 дюйма

Поскольку изображения охватывают весь носитель, эффективные разрешения:

1620 / 22,5 = 72 на 5868 / 81,5 = 72

3372 / 22,5 = 149,866 по 12225 / 81,5 = 150

Я думаю, что MuPDF даст вам размеры изображения и размеры носителя, при условии, что все ваши PDF-файлы сконструированы таким образом, что вы можете просто выполнить математику, но учтите, что это не будет так просто для обычных PDF-файлов, где изображения не отображаются. т охватывают все средства массовой информации.

Использование mutool info -I -M 150-dpi.pdf дает:

Получение информации со страниц 1-1 ...

Медиабоксы (1): 1 (6 0 R): [0 0 1620 5868]

Изображения (1): 1 (6 0 R): [DCT] 3375x12225 8 бит / с DevCMYK (12 0 R)

Так что есть ваши размеры изображения и размер вашего носителя. Все, что вам нужно сделать, это применить разделение одного на другое.

Примечание: в Debian и связанных дистрибутивах mutool содержится в пакете mupdf-tools, а не в самом пакете mupdf. Поэтому он может быть установлен sudo apt install mupdf-tools.

...