0

我已经在 PDF 上尝试了一些测试Imagick::getImageResolution,但我无法弄清楚如何获得嵌入在 PDF 中的图像的分辨率(和色彩空间)。我尝试从 PDF 中提取图像,但在此过程中,似乎 DPI 被任意设置为 72,与我所做的无关。

我在1564529中看到有人说 DPI 与 PDF 无关,但事实并非如此(当图像嵌入 PDF 时,有关图像的几个属性,如分辨率,在 PostScript 中定义)。PHP中有没有办法(可能使用PSLib?)来确定嵌入式图像的 DPI 是什么?

4

2 回答 2

5

PDF(或 PostScript)中图像的“dpi”比您想象的要模糊。这是因为可以以不同的比例渲染 PDF,因此实际 dpi 会有所不同。

您是正确的,有关于文档中嵌入的图像的比例因子的信息。这就是电流变换矩阵,但它不像单个值,甚至不是单个矩阵那么简单。

CTM 将坐标映射到理想化的“用户空间”,该用户空间名义上以点(每英寸 72 点)定义,但可以无限细分。在渲染方面,“用户空间”应用了进一步的转换以将其正确缩放到“设备空间”,需要进行转换,因为设备可能不是 72 dpi。

您可以在 PDF 参考手册中找到更完整的解释,尤其是 1.7 参考中的第 4.2.1 节。

因此,您似乎需要做的就是从图像字典中获取声明的 /Width 和 /Height,并应用 /Matrix 来确定图像在用户空间中的大小。假设用户空间实际上是 72 dpi,那么您将知道图像被缩放到多少英寸,图像包含多少像素,并且简单的除法会给您想要的答案。

事实上,在某些情况下,这会起作用。但是,从您的角度来看,其中一个问题是,连接矩阵以影响当前缩放是可能的,实际上很常见,因此仅查看应用于图像的矩阵不会为您提供应用于该图像的比例因子图像,因为其他东西可能已经缩放了 CTM。此外,PDF 包含“UserUnit”组件,它允许文件更改用户空间的默认缩放。

因此,计算图像“dpi”的唯一方法是将页面描述解释为图像呈现的点,计算出该点的总缩放比例,然后从那里计算出图像覆盖的区域。然后给定图像的宽度和高度,计算出它的 dpi。

顺便说一句,这对您来说是一个难题;完全可以使用相同的图像数据在 PDF 中多次绘制相同的图像。您只需包含一次图像数据。如果我绘制一个 100 像素 x 100 像素的图像,并将其绘制为覆盖一平方英寸,则分辨率为 100 dpi。现在我绘制相同的图像,但我将其缩放到半英寸。渲染图像的分辨率现在为 200 dpi。

那么“图像的 dpi”是什么?

于 2012-05-26T07:48:53.043 回答
1

希望这可以帮助你:

http://forums.digitalpoint.com/showthread.php?t=884349

于 2012-05-26T03:28:59.540 回答