使用 Python 将 TIFF 图像转换为 jpg 时出错

Error when coverting TIF images into jpg with Python

我有一个包含 2000 张 TIF 图像的文件夹,我想将它们转换为 jpg 图像。 我写了两个代码,都运行良好,直到它们转换了 370 张图像,然后它们引发了错误

这是我的第一个代码:

DestPath='/media/jack/Elements/ToJPG95/'
from PIL import Image
import os
def change(path, row):
  filename1=path+row
  filename=row.split('.')[0] + '.jpg'
  im = Image.open(filename1)
  img= im.convert('RGB')
  Dest=os.path.join(DestPath,filename)
  img.save(Dest, format='JPEG',quality=95)


import csv
sourcePath='/media/jack/Elements/TifImages/'
with open("TIFFnames.csv") as f:
    filtered = (line.replace('\n', '') for line in f)
    reader = csv.reader(filtered)
    for row in filtered:
       change(sourcePath , row)

这是我的第二个代码,我 运行 在包含图像的文件夹中:

from PIL import Image  # Python Image Library - Image Processing
import glob
DestPath='/media/jack/Elements/ToJPG95/'
print(glob.glob("*.TIF"))
for file in glob.glob("*.TIF"):
    im = Image.open(file)
    rgb_im = im.convert('RGB')
    rgb_im.save(DestPath+file.replace("TIF", "jpg"), quality=95)
# based on SO Answer: 

他们最多转换370张图片然后报错 这是我收到的错误:

Traceback (most recent call last):
  File "conmg.py", line 7, in <module>
    rgb_im = im.convert('RGB')
  File "/home/jack/.local/lib/python3.6/site-packages/PIL/Image.py", line 873, in convert
    self.load()
  File "/home/jack/.local/lib/python3.6/site-packages/PIL/TiffImagePlugin.py", line 1070, in load
    return self._load_libtiff()
  File "/home/jack/.local/lib/python3.6/site-packages/PIL/TiffImagePlugin.py", line 1182, in _load_libtiff
    raise OSError(err)
OSError: -2

我试过解决方案中提到的imagemagick Here

但这就是我点击进入 运行 命令时得到的结果:

jack@jack-dell:/media/jack/Elements/TifImages$ for f in *.tif; do  echo "Converting $f"; convert "$f"  "$(basename "$f" .tif).jpg"
> 
> 
> 
> 

如您所见,它什么都不做 我认为这些代码运行良好,但由于某种原因,它们在转换 370 张图像后失败了 我 运行 正在使用 6 TB 外置硬盘。 谁能告诉我有什么问题吗?

正如@fmw42 所说,您可能遇到了第 370 个文件的问题(已损坏,或某些不受支持的 TIFF 变体)。您 bash 代码将转换所有可以读取的文件,它不起作用,因为您缺少结束 done:

 for f in *.tif; do  echo "Converting $f"; convert "$f"  "$(basename "$f" .tif).jpg" ; done

如果您使用 try/except 捕获错误并继续下一个文件,您的 Python 也会转换所有可读文件:

for file in glob.glob("*.TIF"):
    try: 
        im = Image.open(file)
        rgb_im = im.convert('RGB')
        rgb_im.save(DestPath+file.replace("TIF", "jpg"), quality=95)
    except:
        print('File not converted:',file)