Размеры PDF против фактического размера содержимого - PullRequest
3 голосов
/ 20 мая 2011

В настоящее время я использую imagick от php для преобразования некоторых PDF-файлов в изображения - это хорошо работает для мелких деталей, которые изображения «режут» во время вывода.

Это связано с тем, что информация в PDF-файле отличается от фактических размеров содержимого.

PDF сообщает, что это документ 612x792 72ppi, но когда я экспортирую из него изображение с помощью предварительного просмотра на Mac, изображение составляет 1651x1275 - Как это возможно?

Очевидно, что экспорт выполнен правильно, так как изображение правильно просматривается в этих измерениях. Может ли быть так, что файл PDF был просто неправильно закодирован, где были смешаны ширина и высота? Как я могу обнаружить это через код? Кроме того, экспорт изображений имеет другой (намного больший) размер, примерно в два раза больше, поэтому я полагаю, что некоторая информация неправильно читается imagick.

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

Спасибо!

РЕДАКТИРОВАТЬ: (код добавлен)

<?php
$im = new Imagick();
$im->readImage("SomeTest.pdf");
$im->setImageColorspace(255);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(60);
$im->setImageFormat('jpeg');
$im->writeImages("SampleImage.jpg");
?>

Используется следующий PDF-файл: http://www.pantone.com/pages/MYP_mypantone/software_downloader.aspx?f=3

Кроме того, вот вывод imagick из функции identifImage (), который кажется немного неправильным, если смотреть на размер файла.

Array
(
    [imageName] => /tmp/magick-XXehkI8e
    [format] => PDF (Portable Document Format)
    [geometry] => Array
        (
            [width] => 612
            [height] => 792
        )

    [type] => TrueColor
    [colorSpace] => RGB
    [resolution] => Array
        (
            [x] => 72
            [y] => 72
        )

    [units] => Undefined
    [fileSize] => 50mb
    [compression] => Undefined
    [signature] => 9426f3fc4f45afd71941435a37d585d01e01d32458f3ca241e72892c2f7f35d5
)

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

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

PDF действительно имеет разрешение только тогда, когда он отображается на определенном устройстве (и это может или не может быть в разрешении устройства).

"А как насчет изображений? Изображения в PDF-файлах определенно дают разрешение!" Вроде, как бы, что-то вроде. Изображения в формате PDF представляются в виде образцов без единиц измерения и сами не имеют разрешения до тех пор, пока они не будут созданы на странице. Я могу взять однобитное изображение с разрешением 8,5 x 11 дюймов и разрешением 300 т / д и вставить его в PDF-файл, но это же изображение можно поместить в поток содержимого страницы в пространство, которое заполняет все пространство размером 8,5 x 11 дюймов, сохраняя тем самым разрешение или его можно отобразить в виде уменьшенной миниатюры (создавая более высокое разрешение с помощью шкалы), и даже эти «разрешения» не применяются, пока страница фактически не будет отображена на устройстве. Кроме того, средства рендеринга PDF не лишены возможности выполнять билинейную (или некоторую другую) интерполяцию для увеличения видимого разрешения изображения.

Чтобы дать вам более конкретный пример, если я отображаю PDF-страницу на мониторе с разрешением 96 точек на дюйм при разрешении 100%, разрешение этой страницы не превышает 96 точек на дюйм. Если я отрисовываю эту страницу PDF на фотонаборном устройстве с разрешением 1800 т / д, разрешение страницы не превышает 1800 т / д.

Если я отображаю изображение с разрешением 300 точек на дюйм при 100% на странице PDF и 100% на мониторе с разрешением 96 точек на дюйм, разрешение изображения на странице составляет 96 точек на дюйм. Если я отрисовываю изображение с разрешением 300 точек на дюйм при 100% на странице PDF, отображаемой со скоростью 100% на фотонаборном устройстве с разрешением 1800 точек на дюйм, разрешение изображения на странице составляет 300 точек на дюйм.

Выходные данные, которые вы видите по магии изображения, равны , вероятно , отражая, что страница размером 8,5 x 11 дюймов в единицах PDF равна 612 x 792, а 1 единица PDF эквивалентна 1/72 дюйма. Предполагается, что предварительный рендеринг выполняется при ~ 194 dpi.

1 голос
/ 20 мая 2011

Изображение в PDF-файле было уменьшено до некоторого размера в PDF-файле (или оно будет обрезано, если вы посмотрите на него в Reader et al.).

ImageMagick (который, как мне кажется, использует imagick) использует GhostScript для преобразования PDF-файлов в изображения. GhostScript достаточно хорош при рендеринге файлов PDF. Мне интересно, не передаете ли вы какую-то плохую информацию.

Можем ли мы увидеть код? Ссылки на ваш входной PDF и выходное изображение тоже были бы хорошими.


Я только что запустил gs 8.71 в вашем PDF, и он отрисовался нормально. Какую версию GhostScript вы используете?

...