吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 579|回复: 5
收起左侧

[求助] python 转换图片后不完整求解

[复制链接]
knx888 发表于 2024-8-11 12:56
本帖最后由 knx888 于 2024-8-11 22:46 编辑

如下代码,请前辈指点

[Python] 纯文本查看 复制代码
import fitz  # PyMuPDF
from PIL import Image

def convert_pdf_to_images(pdf_path, resolution):
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)

    # 存储所有转换后的图片
    images = []

    # 遍历 PDF 中的每一页
    for page_number in range(len(pdf_document)):
        page = pdf_document[page_number]

        # 获取页面的原始大小(以点为单位)
        zoom_x = resolution / page.rect.width
        zoom_y = resolution / page.rect.height

        # 将 PDF 页面转换为图片
        pix = page.get_pixmap(matrix=mat)

        # 使用 PIL 的 Image 对象打开图片
        image = image = Image.frombytes("RGB", (pix.width, pix.height), pix.samples)

        # 将图片添加到列表中
        images.append(image)

    # 合并所有图片
    total_height = sum(image.size[1] for image in images)
    combined_image = Image.new('RGB', (images[0].size[0], total_height))

    current_height = 0
    for image in images:
        combined_image.paste(image, (0, current_height))
        current_height += image.size[1]

    # 关闭 PDF 文件
    pdf_document.close()

    return combined_image

combined_image = convert_pdf_to_images(r"F:\pdf处理\处理.pdf", resolution=3396)

# 保存合并后的图片
combined_image.save(r"F:\pdf处理\处理.png")

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

vista_info 发表于 2024-8-11 13:10
本帖最后由 vista_info 于 2024-8-11 13:16 编辑

建议检查imagesize数据是否符合预期,比如自行在ps新建100*200的图片若干(pdf页面等大),检查代码运行过程中变量是否正确,以及图片结果是否合理;
或是页面缩放统一分辨率这里缩放后每页状态。
另附别人在github上开源的同类工具供参考https://github.com/yuanqimanong/imgconvert-tool

 楼主| knx888 发表于 2024-8-11 14:31
vista_info 发表于 2024-8-11 13:10
建议检查imagesize数据是否符合预期,比如自行在ps新建100*200的图片若干(pdf页面等大),检查代码运行过 ...

好的,谢谢前辈指点。
huluwa123 发表于 2024-8-11 16:17
[Asm] 纯文本查看 复制代码
您提供的Python代码使用PyMuPDF库(fitz模块)将PDF文件转换为图片,并将这些图片合并成一张长图。代码逻辑是正确的,但如果在合并图片时遇到最后一张图片显示不完整的问题,可能是由以下原因造成的:
1. 分辨率设置: resolution 参数可能不适合PDF的最后一页。如果最后一页的宽度或高度大于其他页面,即使使用了最小缩放比例,也可能无法完整显示。
2. 图片尺寸计算:在计算 zoom_x 和 zoom_y 时,如果使用 page.rect.width 和 page.rect.height ,这可能不包括PDF页面的裁剪边距。如果最后一页的实际内容区域比其他页面大,这可能导致显示不完整。
3. 图片合并逻辑:在合并图片时,如果最后一张图片的底部与 total_height 不匹配,可能导致显示问题。
为了解决这个问题,您可以尝试以下步骤:
检查PDF页面尺寸:确保您了解PDF中每一页的实际内容尺寸,特别是最后一页。
调整分辨率:尝试调整 resolution 参数,以确保所有页面都能以合适的大小转换。
修改缩放逻辑:在计算 zoom 时,可以考虑添加一个额外的缩放因子,以确保所有页面都能完整显示。
检查图片合并:在合并图片时,确保 current_height 的累加是正确的,并且没有超过 total_height 。
此外,您的代码中有一个小错误,在创建 Image.frombytes 对象时,使用了两次 image = 。这可能是一个笔误,正确的代码应该是:
image = Image.frombytes("RGB", (pix.width, pix.height), pix.samples)
修正这个错误后,再次运行代码,看看是否解决了最后一张图片显示不完整的问题。如果问题依旧,可能需要进一步调试或调整代码逻辑。
 楼主| knx888 发表于 2024-8-11 17:56
huluwa123 发表于 2024-8-11 16:17
[mw_shl_code=asm,true]您提供的Python代码使用PyMuPDF库(fitz模块)将PDF文件转换为图片,并将这些图片合 ...

感谢前辈指点。
vista_info 发表于 2024-8-11 19:20
knx888 发表于 2024-8-11 14:31
好的,谢谢前辈指点。

说前辈有些言重了,碰巧思考过类似的需求
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 09:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表