我目前正在使用php的imagick将一些PDF转换为图像 - 这适用于输出过程中图像被“切断”的小细节。
这是由于PDF中包含的信息与实际内容维度的不同。
PDF报告为612x792 72ppi文档,但当我通过Mac上的预览从中导出图像时,图像为1651x1275 - 这怎么可能?
显然导出是正确的,因为在这些尺寸中正确查看图像 - 可能是PDF在宽度和高度混合的情况下被错误地编码了吗?如何通过代码检测到这个?此外,图像导出的大小不同(大得多),大小只有两倍,这让我相信想象力无法正确读取某些信息。
基本上我想知道是否有正确的方法来确定实际的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
)
答案 0 :(得分: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。
您从图像magick看到的输出可能反映出PDF单位的8.5“x 11”页面为612 x 792,1 PDF单位相当于1/72英寸。预览渲染似乎在~194 dpi完成。
答案 1 :(得分:1)
PDF中的图像缩小到PDF中的某个尺寸(或者在Reader等人看到它时会被裁剪。)
ImageMagick(我想象你使用它)使用GhostScript将PDF转换为图像。 GhostScript非常擅长渲染PDF文件。我不得不怀疑你是否传递了一些不良信息。
我们能看到一些代码吗?输入PDF和输出图像[s]的链接也不错。
我刚刚在你的PDF上运行了gs 8.71,它渲染得很好。您使用的是什么版本的GhostScript?