"用PILLOW 3.1.0时,为什么会出现“文件已关闭的I/O操作”?"

2024-06-16 11:52:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用PillowPyPDFtiff文件转换为PDF。我可以使用Pillow的早期版本来实现这一点,但我不能使用哪个版本。在

我最近升级到Pillow 3.1.0,现在遇到了问题。这是以前的工作代码。在

import os
import traceback

from PIL import Image
from PyPDF2 import PdfFileReader, PdfFileMerger

to_merge = []

with Image.open('my_tif.tif') as img:
    seeker = 0

    while True:
        try: 
            # temp file name for PDF
            img_pdf = 'temp_{}.pdf'.format(seeker)

            #seeks to next image with TIFF
            img.seek(seeker)

            # saves the image as a PDF
            img.save(img_pdf)

            seeker += 1
            to_merge.append(img_pdf)

        except Exception as err:
            traceback.print_exc()
            break                

merger = PdfFileMerger()
for f in to_merge:
    merger.append(PdfFileReader(f))
    os.remove(f)
merger.write('merged.pdf')

事先,它为tiff中的每个图像生成一个PDF文件,然后毫无问题地将PDF合并在一起。在

在我升级到Pillow 3.1.0之后,它会循环遍历所有的图像,但是在最后一个图像上抛出一个ValueError。在

^{pr2}$

引起ValueError的原因是什么?在


Tags: 文件to图像import版本imgpdfos
1条回答
网友
1楼 · 发布于 2024-06-16 11:52:44

不久前我也有同样的问题。我找到的唯一解决方案是将文件作为文件对象打开并将其传递给图像。打开在每次迭代中:

with open('my_tif.tif', 'rb') as f:
    seeker = 0

    while True:
        try: 
            img = Image.open(f)  
            # temp file name for PDF
            img_pdf = 'temp_{}.pdf'.format(seeker)

             #seeks to next image with TIFF
             img.seek(seeker)

             # saves the image as a PDF
             img.save(img_pdf)

             seeker += 1
             to_merge.append(img_pdf)

        except Exception as err:
            traceback.print_exc()
            break         

相关问题 更多 >