获取PDF图像的DPI信息 Python

4

我有一个pdf文件,其中嵌入了一张图片,我该如何使用Python获取该图片的DPI信息。

我尝试使用"pdfimages" popler-util,它给出了图片的像素高度和宽度。

但是我该如何从中获取图片的DPI信息呢?

3个回答

3

与PostScript格式或EPS格式一样,PDF文件没有分辨率,因为它是矢量格式。您能做的就是在pt(或像素)中检索图像尺寸:

from PyPDF2 import PdfFileReader


with io.open(path, mode="rb") as f:
    input_pdf = PdfFileReader(f)
    media_box = input_pdf.getPage(0).mediaBox

min_pt = media_box.lowerLeft
max_pt = media_box.upperRight

pdf_width = max_pt[0] - min_pt[0]
pdf_height = max_pt[1] - min_pt[1]

问题是关于图像的dpi而不是pdf页面本身的dpi。 - undefined

0
在PDF中,图像的ppi不是dpi。它只是注入的比例。
PDF中的图像不知道DPI,它们只是每个区域的像素/矢量数量。
这个图像是一个像素点,宽3像素,高3像素,所以你可以在非常强大的缩放中看到它HEenter image description hereRE。它有红色、蓝色和2个黑色角落,在这里上面的PNG按照96 DPI的标准缩放,下面相同的PNG在PDF中按照每英寸72pt的标准缩放,其中一个黑色角落现在变成了白色(记住它是一个PNG,因此可以有透明颜色,逆转适用)。

enter image description here

这是一份外部报告,报告中称其现在的比例为3 PPI,这是正确的,但它并不是源头的标称96 DPI。
pdfimages -list "colours (decom).pdf
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image       3     3  rgb     3   8  image  no         6  0     3     3   24B  89%
   1     1 smask       3     3  gray    1   1  image  no         6  0     3     3    4B 400%

一个ppi报告是一个基于存储的宽度除以存储的像素的概念性建议,所以不是源分辨率,源分辨率是未知的。
你可以将图像提取为300 DPI,它可能与源分辨率相似,或者72 DPI也无所谓,1-1000-任何值的报告都没有价值,只是3是它当前内部放置的PPI比例。
为了将RGB图像还原为完美的像素,我们可以运行"pdfimages -png in.pdf out",导出的结果与输入完全相同,只是分辨率现在是72 DPI,没有透明度,是24位的。

enter image description here

这是那个带有透明层的伴随第二部分(也是72 DPI用于注册)。

enter image description here

一些JPEG可能在它们的头部仍然保留有源分辨率,如果在注入过程中没有被移除的话。

0

pdfimages也返回图像的dpi:

> pdfimages -list pdf.pdf
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1308  1675  rgb     3   8  jpeg   no        17  0   150   150  166K 2.6%

x-ppi是你所需要的,对于大多数情况来说已经足够了;我还发现这种方法运行非常快

我刚刚写了一些包装器来运行这个shell命令,并使用Python类提取一些信息


@KJ 这些通常是普通 PDF 文件上的相同内容;当然,你可以构建不同的数字 PDF 案例,但在实际文件中并不重要。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接