我有一个 pdf 文件,其中嵌入了图像,我如何使用 python 获取该特定图像的 DPI 信息。 我尝试使用“pdfimages”popler-util,它为我提供了以像素为单位的高度和宽度。
但是我如何从中获取图像的 DPI。
与 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]
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 类提取一些信息
在 PDF 中,图像 ppi 不是 dpi。这只是它被注入的比例。
PDF 中的图像不了解 DPI,它们只是每个区域的像素数。
ppi 报告是基于存储宽度除以存储像素的名义建议,因此不是源分辨率,因为源分辨率是未知的。
您可以将图像提取为 300 DPI,它可能与源分辨率相似,或者 72 DPI 也没关系,报告 150 是其当前的内部放置 PPI 比例。
如果在注入期间未将其删除,某些 jpeg 的标头中可能仍具有源解析。