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

10

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

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

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

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

我的问题是,是否可以在PyMuPDF中实现这一点?如何将我的图像输出DPI设置为300并将图像大小设置为原始文档大小?我对处理PDF /图像这样的处理比较新,所以任何帮助都将不胜感激。

谢谢!

1个回答

11

PyMuPDF是基于MuPDF封装的。

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

不过,MuPDF支持Tiff格式的输入,但不支持原生地将单个或多个页面导出为Tiff格式,因此需要通过其他方式进行转换,例如从多个PNG文件进行转换。

目前支持的输入和输出格式有多种。

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。 因此,代码片段可能类似于:

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支持在一个文件中包含多个图像。

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