PyMUPDF - 如何将 PDF 转换为图像,使用图像大小的原始文档设置并设置为 300dpi?

PyMUPDF - How to convert PDF to image, using the original document settings for the image size and set to 300dpi?

我目前正在考虑使用 python 包 PyMuPDF 作为将 PDF 转换为图像(在我的例子中是 .TIFF 文件)的工作流程。

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

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

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

我的问题是,这在 PyMuPDF 中可能吗?如何将图像的输出 DPI 设置为 300 并将图像大小设置为原始文档大小?我对处理 PDF's/images 的这种处理还很陌生,所以非常感谢任何帮助。

提前致谢,

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 中问过这个问题,为了其他人的利益,答案是

Sounds like you will create a so-called "pixmap" for each page and save that as an image. PyMuPDF itself only support a handful of image output formats, the most popular being PNG, others are the PNM-type images. If you want to use others, you must use an additional package, presumably PIL/Pillow. PyMuPDF supports Pillow directly via its pixmap output methods. So a code snippet may look like this:

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)

For more sophistication on PIL output, please consult their documentation. For example, TIFF supports multiple images in one file.