如何获得PDF文件的DPI?

时间:2018-04-24 16:34:01

标签: imagemagick ghostscript

使用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值?

2 个答案:

答案 0 :(得分:2)

正如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 by 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页中检索信息......

     

Mediaboxes(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安装。

答案 1 :(得分:0)

我使用poppler库中的pdfimages -list,可为您提供有关图像的所有信息。

相关问题