3

我目前正在使用 php 的 imagick 将一些 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

此外,这是 identifyImage() 函数的 imagick 输出,从文件大小来看似乎有点错误。

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
)
4

2 回答 2

3

您应该知道 PDF 本身是一种无分辨率格式。页面是用数学方法描述的,除了浮点数施加的限制之外,它不受任何特定的分辨率限制。

PDF 只有在渲染到特定设备时才真正具有分辨率(并且可能会或可能不会以设备的分辨率)。

“但是图像呢?PDF 中的图像肯定能提供分辨率!” 有点。PDF 中的图像表示为无单位样本,并且它们本身没有分辨率,直到它们在页面上被实例化。我可以拍摄 300 dpi 8.5"x11" 1 位图像并将其嵌入到 PDF 中,但是可以将相同的图像放入页面的内容流中,填充整个 8.5"x11" 空间,从而保持分辨率或它可以呈现为更小的缩略图(通过比例创建更高的分辨率) - 甚至这些“分辨率”在页面实际呈现到设备之前也不会应用。此外,PDF 渲染器不会被阻止进行双线性(或其他)插值以增加图像的表观分辨率。

举一个更具体的例子,如果我在 96 dpi 的显示器上以 100% 渲染 PDF 页面,则该页面的分辨率不大于 96 dpi。如果我在 1800 dpi 照排机上渲染那个 PDF 页面,页面的分辨率不会超过 1800 dpi。

如果我在 96 dpi 监视器上以 100% 渲染的 PDF 页面上以 100% 渲染 300 dpi 图像,则页面上图像的分辨率为 96 dpi。如果我在 1800 dpi 照排机上以 100% 渲染的 PDF 页面上以 100% 渲染 300 dpi 图像,则页面上图像的分辨率为 300 dpi。

您从 image magick 看到的输出可能反映了以 PDF 为单位的 8.5" x 11" 页面为 612 x 792,而 1 PDF 单位相当于 1/72 英寸。预览渲染似乎以 ~194 dpi 完成。

于 2011-05-20T17:46:05.780 回答
1

PDF 中的图像被缩小到 PDF 中的某个大小(或者当您在 Reader 等人中查看它时会被裁剪)。

ImageMagick(我 ass-u-me imagick 使用)使用 GhostScript 将 PDF 转换为图像。GhostScript 非常擅长渲染 PDF 文件。我不得不怀疑你是否传递了一些不好的信息。

我们可以看到一些代码吗?链接到您的输入 PDF 和输出图像 [s] 也很好。


我刚刚在你的 PDF 上运行了 gs 8.71,它渲染得很好。您使用的是什么版本的 GhostScript?

于 2011-05-20T00:51:17.690 回答