首页 > 后端开发 > Python教程 > 如何使用 Python 从 PDF 中提取高分辨率图像而无需重新采样?

如何使用 Python 从 PDF 中提取高分辨率图像而无需重新采样?

Mary-Kate Olsen
发布: 2024-10-22 07:52:02
原创
840 人浏览过

How to Extract High-Resolution Images from PDFs Without Resampling Using Python?

如何在 Python 中从 PDF 中提取图像而无需重新采样?

以原始分辨率和格式从 PDF 文档中提取图像,无需重新采样重新采样,您可以使用 PyMuPDF 模块。该 Python 模块允许您高效地处理 PDF 文件并操作其内容。以下是如何使用 PyMuPDF 提取图像:

<code class="python">import fitz

doc = fitz.open("input.pdf")
for page_num in range(len(doc)):
    for img in doc.getPageImageList(page_num):
        xref = img[0]
        pix = fitz.Pixmap(doc, xref)
        if pix.n < 5:  # Check if it's grayscale or RGB
            pix.writePNG(f"page_{page_num}_img_{xref}.png")
        else:  # Convert CMYK to RGB before saving
            pix1 = fitz.Pixmap(fitz.csRGB, pix)
            pix1.writePNG(f"page_{page_num}_img_{xref}.png")</code>
登录后复制

在此代码中,我们迭代 PDF 中的页面和图像。 “xref”变量表示图像的唯一标识符。根据图像的颜色空间(RGB 或 CMYK),我们可以直接写入 PNG 图像,也可以在保存之前将 CMYK 转换为 RGB。

或者,如果您使用的是 fitz 版本 1.19.6,则可以使用使用以下代码执行提取,并带有进度条以获得更好的可视性:

<code class="python">import os
import fitz
from tqdm import tqdm

workdir = "path_to_pdf_folder"

for each_path in os.listdir(workdir):
    if ".pdf" in each_path:
        doc = fitz.Document(os.path.join(workdir, each_path))

        for i in tqdm(range(len(doc)), desc="pages"):
            for img in tqdm(doc.get_page_images(i), desc="page_images"):
                xref = img[0]
                image = doc.extract_image(xref)
                pix = fitz.Pixmap(doc, xref)
                pix.save(os.path.join(workdir, f"{each_path[:-4]}_p{i}-{xref}.png"))</code>
登录后复制

这些代码片段将使您能够从 PDF 中提取图像,并保留其原始分辨率和格式。

以上是如何使用 Python 从 PDF 中提取高分辨率图像而无需重新采样?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板