如何检查 PDF 页面的嵌入图像的分辨率 (DPI)

本文关键字:分辨率 DPI 图像 何检查 检查 PDF | 更新日期: 2023-09-27 18:37:23

是否有任何免费库可用于获取PDF文件中包含的DPI图像的分辨率?

我已经尝试了以下代码,使用 PDFSharp,但它返回的 DPI 不正确。例如,它显示 96dpi,而它应该是 150dpi:

using (PdfDocument pdf = PdfReader.Open(sourcePdf))
{
    for (int i = 0; i < pdf.Pages.Count; i++)
    {
        XGraphics xGraphics = XGraphics.FromPdfPage(pdf.Pages[i]);
        float dpi = xGraphics.Graphics.DpiX; 
    }
}

如何检查 PDF 页面的嵌入图像的分辨率 (DPI)

您可以使用命令行工具来获取所需的信息: pdfimages .

但是,您需要一个基于Poppler库的最新版本pdfimages而不是基于XPDF的"pdfimages"!

最近的 Poppler 版本允许您使用 -list 选项:

pdfimages -list -f 2 -l 4 my.pdf

上述示例命令的输出显示页面范围内的所有图像,从 2(显示的页面)到 4(显示

的页面)。

以下是上述命令的输出,使用我专门为此问题准备的示例 PDF 文件(水平滚动以查看所有列):

page num  type width height color comp bpc  enc interp object ID x-ppi y-ppi size ratio
---------------------------------------------------------------------------------------
   2   0 image   697  1238  gray    1   8  jpeg   no       16  0   320   320  142K  17%
   3   1 image   697  1238  gray    1   8  jpeg   no       16  0   151   151  142K  17%
   4   2 image   697  1238  gray    1   8  jpeg   no       16  0    84   115  142K  17%

输出显示以下内容:

  1. 页 2-4 上有三张图片(如第 1+2 栏所示,标题为 pagenum )。

  2. 所有三个图像的 PDF 对象 ID 都是相同的:16 0(如第 11+12 列所示,标题为 object + ID )。这意味着PDF只定义了一个不同的对象,但显示它三次(即,图像只嵌入一次,但出现在3页上)。

  3. 图像的宽度为 697 像素,高度为 1238 像素,图像深度(每颜色位数)为 8,色彩空间为 gray 颜色通道/分量的数量为 1 ,压缩方案为 jpeg,字节化(如嵌入)为 142K,压缩率为 17%(如第 4-9 列和 14+15 标题width所示, heightcolorcompbpcsizeratio)。

  4. 但是,相同的图像以不同的分辨率出现在不同的页面上(以PPI表示 - 每英寸像素数---不是DPI):

    • 第 2 页显示它的 PPI 在两个方向上均为 320

    • 第 4 页显示它的 PPI 在两个方向上均为 151

    • 而第 3 页显示它在水平 (X) 方向上的 PPI 为 84,在垂直 (Y) 方向上为 115 PPI。


现在,如果命令行工具不能重新用于您的目标:作为上面所示工具基础的 Poppler 库肯定是自由的("自由如自由",以及"自由如啤酒")。


这是我用来演示上述命令输出的PDF("my.pdf")的链接

PDF 不一定在其定义中使用 DPI。PDF 允许 文档创建者定义自己的用户坐标空间,这可以 或者可能不会映射到类似于每英寸点数的任何内容。

从这里: