如何获得PDF文件的DPI?

问题描述 投票:1回答:1

使用imagemagick或GhostScript或任何PHP代码如何获取PDF文件的DPI值?这是两个演示文件的链接http://jmp.sh/O5g5wL4 - 72 DPI http://jmp.sh/RxrnYrY - 300 DPI

我用过

   $image = new Imagick();
   $image->readImage('xyz.pdf');
   $resolutions = $image->getImageResolution();

它为具有不同DPI的两个不同PDF文件提供相同的结果。

我也用过

pdfimages -list xyz.pdf

它提供了所有信息的列表,但是如何从列表中获取DPI值。

如何获得PDF的确切DPI值?

imagemagick ghostscript
1个回答
3
投票

正如fmw42所说,PDF文件本身没有解决方案。但是在你的情况下,这两个文件只包含一个图像。在一种情况下,图像大约为48 MB,而在另一种情况下大约为200 MB。

原因是图像具有不同的有效分辨率。

在PDF中,图像只是一个位图,一系列彩色像素。然后将它们绘制到底层媒体上。此时没有分辨率,像素以特定的介质尺寸放置。在你的情况下22英寸乘82英寸。

通过将维度除以该维度中图像中的像素数来给出有效分辨率。

因此,如果我的图像为1000x1000像素,并且我将其绘制在1英寸的正方形中,则图像的有效分辨率为1000 dpi。如果我改变主意并将其绘制成4英寸×4英寸的正方形,则有效分辨率为250 dpi。

图像没有改变,只是它覆盖的区域。

现在考虑我有两个以1英寸方块绘制的图像。第一张图片是1000x1000,第二张图片是500x500。第一幅图像的有效分辨率为1000 dpi,第二幅图像的有效分辨率为500 dpi。

因此,您可以看到,在PDF中,图像的有效分辨率是图像尺寸与其覆盖的介质尺寸的组合。

在PDF文件中测量是一件困难的事情。覆盖面积使用矩阵代数计算,可以是几个不同矩阵的组合。

相比之下,图像的实际尺寸很容易确定,它们在图像字典中给出。您的图片是:1620x5868和3372x12225。在这两种情况下,媒体都是相同的大小; 22.5x81.5英寸。

由于图像覆盖整个媒体,因此有效的分辨率是;

1620 / 22.5 = 72乘5868 / 81.5 = 72

3372 / 22.5 = 149.866 by 12225 / 81.5 = 150

我认为MuPDF将为您提供图像尺寸和介质尺寸,假设您的所有PDF文件都是这样构造的,那么您可以简单地执行数学运算,但请注意,对于普通PDF文件而言,这不会如此简单,因为图像不能覆盖图像整个媒体。

使用mutool info -I -M 150-dpi.pdf给出:

从第1-1页检索信息...

媒体盒(1):1(6 0 R):[0 0 1620 5868]

图像(1):1(6 0 R):[DCT] 3375x12225 8bpc DevCMYK(12 0 R)

因此,您的图片尺寸和媒体尺寸都是如此。您需要做的就是逐个应用除法。

注意:在debian和相关的发行版中,mutool包含在mupdf-tools包中,而不是mupdf包本身。因此它可以由sudo apt install mupdf-tools安装。

© www.soinside.com 2019 - 2024. All rights reserved.