Strawberry Bubblegum 2024-09-24 16:58 采纳率: 20%
浏览 1

如何处理 img.mode = 1 导致多页 TIFF 文件转换为 PDF 时只能输出第一页

问题内容
我在编写一个将多页 TIFF 文件转换为 PDF 的函数时遇到了一些问题。以下是我使用的代码片段:

// def tiff_to_pdf(tiff_path, pdf_directory):
    try:
        os.makedirs(pdf_directory, exist_ok=True)
        file_name = os.path.basename(tiff_path).replace('.tif', '.pdf').replace('.tiff', '.pdf')
        pdf_path = os.path.join(pdf_directory, file_name)

        with Image.open(tiff_path) as img:
            c = canvas.Canvas(pdf_path, pagesize=A4)
            page_width, page_height = A4

            converted_pages = 0 
            try:
                for i in range(img.n_frames):  # 遍历所有的帧
                    img.seek(i)
                    if img.mode != 'RGB':
                        img = img.convert('RGB')
                    img_width, img_height = img.size
                    ratio = min(page_width / img_width, page_height / img_height)
                    new_width, new_height = img_width * ratio, img_height * ratio
                    x, y = (page_width - new_width) / 2, (page_height - new_height) / 2
                    c.drawImage(ImageReader(img), x, y, width=new_width, height=new_height)
                    c.showPage()
                    converted_pages += 1 
            except EOFError:
                print(f"Reached end of file for {tiff_path}")

            c.save()
            return "Success", None, img.n_frames, converted_pages

    except Exception as e:
        return "Failed", str(e), None, None

问题是,当 img.mode 为 ‘1’(表示黑白图像)时,调用 convert(‘RGB’) 转换模式失败,并且程序只能输出多页 TIFF 文件的第一页,后续页面都无法转换。但是也不会报错,输出的图像只有第一页

正常这个库是正常支持黑白图像转换为RGB格式的
有人遇到过类似问题吗?如何在这种情况下正确地将 mode=1 的图像转换为 RGB,并确保多页 TIFF 的所有页面都能被正确写入 PDF?

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-24 17:00
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题可能是由于 PIL 库中的一些设置导致的。PIL 是 Python Imaging Library 的缩写,它是一个用于处理图像文件的标准库。在您的代码中,您尝试将 img 转换为 RGB 模式,但遇到了错误。

    为了解决此问题,您可以考虑以下步骤:

    1. 检查 PIL 设置:首先,确保您正在使用的是正确的版本的 PIL。可以尝试安装最新版本的 PIL 并更新到最新版本。

      pip install --upgrade pillow
      
    2. 调整 PIL 环境变量:如果您使用的是 Python 3.x 版本,请确保环境变量 PYTHONPATH 包括了 PIL 的目录。例如,在 Windows 上,您可以这样做:

      export PYTHONPATH=%PYTHONPATH%;C:\path\to\Pillow
      
    3. 修改转换模式:尝试使用 PIL 中的其他模式来替换 convert('RGB')。例如,您可以使用 mode='L' 来保持原始黑白模式,或者使用 mode='1' 来保留灰度图像。

    4. 重新运行代码:根据上述步骤进行更改后,重新运行您的代码以查看是否解决了问题。

    5. 调试代码:如果问题仍然存在,您可以添加一些额外的调试语句来跟踪图像转换过程中的每个步骤。这可以帮助您更深入地了解问题所在。

    请注意,以上建议适用于基于 Python 的开发环境。如果您正在使用 Jupyter Notebook 或其他交互式编程环境,可能需要进一步调整代码以适应这些环境。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月24日

悬赏问题

  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 C++行情软件的tick数据如何高效的合成K线
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战
  • ¥15 svpwm波形异常求解答