【问题标题】:PyMUPDF - How to convert PDF to image, using the original document settings for the image size and set to 300dpi?PyMUPDF - 如何将 PDF 转换为图像,使用图像大小的原始文档设置并设置为 300dpi?
【发布时间】:2021-10-02 08:13:00
【问题描述】:

我目前正在考虑将 python 包 PyMuPDF 用于将 PDF 转换为图像(在我的情况下为 .TIFF 文件)的工作流程。

我正在尝试模仿我目前用于 PDF -> 图像转换的另一个程序的行为。在该程序中,它可以让您设置成像设置如下:

图像输出质量 (DPI):(默认为 300dpi)

基本图像尺寸:原始设置 - 使用原始文档设置呈现图像。

我的问题是,这在 PyMuPDF 中是否可行?如何将图像的输出 DPI 设置为 300 并将图像大小设置为原始文档大小?我对处理 PDF/图像的这种处理非常陌生,因此非常感谢任何帮助。

提前致谢,

【问题讨论】:

    标签: pymupdf


    【解决方案1】:

    PyMuPDF 被 MuPDF 包裹

    它有许多强大的 pdf 操作选项,包括设置页面比例和页面图像输出分辨率的能力。

    但是 MuPDF 确实支持 Tiff 输入但不原生导出到单页或多页 Tiff,因此需要从多个原生 PNG 进行额外转换。

    当前inputs and outputs的范围

    Input   Output  Description
    JPEG    -       Joint Photographic Experts Group
    BMP     -       Windows Bitmap
    JXR     -       JPEG Extended Range
    JPX     -       JPEG 2000
    GIF     -       Graphics Interchange Format
    TIFF    -       Tagged Image File Format
    PNG     PNG     Portable Network Graphics
    PNM     PNM     Portable Anymap
    PGM     PGM     Portable Graymap
    PBM     PBM     Portable Bitmap
    PPM     PPM     Portable Pixmap
    PAM     PAM     Portable Arbitrary Map
    -       PSD     Adobe Photoshop Document
    -       PS      Adobe Postscript
    

    要导出到 tiff,您需要按照以下方式说 PIL/Pillow

    from PIL import Image
    import fitz
    
    pix = fitz.Pixmap(...)
    img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
    img.save("output.tif", "TIFF")
    
    

    但是,要将单页存储到多页,您需要尝试 PILlow 设置。

    [更新]

    我看到你在 PyMuPDF 中问过这个问题,而对于其他人来说,答案是

    听起来您将为每个页面创建一个所谓的“像素图”并将其保存为图像。 PyMuPDF 本身只支持少数几种图像输出格式,最流行的是 PNG,其他的是 PNM 类型的图像。 如果要使用其他的,则必须使用额外的包,大概是 PIL/Pillow。 PyMuPDF 通过其像素图输出方法直接支持 Pillow。 所以代码 sn-p 可能如下所示:

    import fitz
    mat = fitz.Matrix(300 / 72, 300 / 72)  # sets zoom factor for 300 dpi
    doc = fitz.open("yourfile.pdf")
    for page in doc:
        pix = page.get_pixmap(matrix=mat)
        img_filename = "page-%04i.tiff" % page.number
        pix.pil_save(img_filename, format="TIFF", dpi=(300,300), ... more PIL parameters)
    

    有关 PIL 输出的更多详细信息,请参阅他们的文档。例如,TIFF 支持在一个文件中包含多个图像。

    【讨论】:

      猜你喜欢
      • 2022-07-15
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      相关资源
      最近更新 更多