【问题标题】:php detect dpi of image in a pdfphp检测pdf中图像的dpi
【发布时间】:2012-05-26 03:24:31
【问题描述】:

我在 PDF 上使用Imagick::getImageResolution 尝试了一些测试,但我不知道如何获得嵌入在 PDF 中的图像的分辨率(和色彩空间)。我尝试从 PDF 中提取图像,但在此过程中,似乎 DPI 被任意设置为 72,而不管我做什么。

我在1564529 看到有人说 DPI 对 PDF 无关紧要,但事实并非如此(当图像嵌入 PDF 时,有关图像的几个属性,如分辨率,在 PostScript 中定义) . PHP中有没有办法(可能是PSLib?)来确定嵌入图像的DPI是多少?

【问题讨论】:

    标签: php pdf dpi postscript


    【解决方案1】:

    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”是什么?

    【讨论】:

    • 您好 KenS,感谢您的详细回复! RE 你的问题,我不能考虑那两张不同的图片吗?
    【解决方案2】:

    【讨论】:

    • 感谢 budwiser。这主要是我遇到的。这有点令人沮丧,因为我知道信息就在那里,我只是不知道如何访问它:/
    • @budwiser:jacob 已经在他原来的问题中引用了#1564529——你没看到吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多