使用不同格式调整文件夹中的多个图像

问题描述

我目前正在使用 pil 调整文件夹中的多个图像的大小,该文件夹包含多个不同格式的图像,例如 bmp、jpg 和 tif

我已经成功地实现了以下代码来调整 bmp 和 jpg 的图像大小,但我没有为 tif 图像 做到这一点。

import shutil
import os
from PIL import Image

dir_name = "C:/Users/fyp/test1/"
test = os.listdir(dir_name)
destDirectory = "C:/Users/fyp/test2/"

for item in test:
    if item.endswith(".tif"):
        img = Image.open(dir_name + item)
        imgResize = img.resize((224,224),Image.ANTIALIAS)
        imgResize.save(destDirectory + item[:-4] + '.tif',quality = 95)

tif 图像中出现的错误是:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-8-b666efd7a46f> in <module>
     10     if item.endswith(".tif"):
     11         img = Image.open(dir_name + item)
---> 12         imgResize = img.resize((224,Image.ANTIALIAS)
     13         imgResize.save(destDirectory + item[:-4] + '.tif',quality = 95)
     14 

~\Anaconda3\lib\site-packages\PIL\Image.py in resize(self,size,resample,Box,reducing_gap)
   1852 
   1853         if self.mode in ["LA","RGBA"]:
-> 1854             im = self.convert(self.mode[:-1] + "a")
   1855             im = im.resize(size,Box)
   1856             return im.convert(self.mode)

~\Anaconda3\lib\site-packages\PIL\Image.py in convert(self,mode,matrix,dither,palette,colors)
    871         """
    872 
--> 873         self.load()
    874 
    875         if not mode and self.mode == "P":

~\Anaconda3\lib\site-packages\PIL\TiffImagePlugin.py in load(self)
   1068     def load(self):
   1069         if self.use_load_libtiff:
-> 1070             return self._load_libtiff()
   1071         return super().load()
   1072 

~\Anaconda3\lib\site-packages\PIL\TiffImagePlugin.py in _load_libtiff(self)
   1180 
   1181         if err < 0:
-> 1182             raise OSError(err)
   1183 
   1184         return Image.Image.load(self)

OSError: -2

我可以知道这是什么原因吗?非常感谢!

更新 1/8/2021

我想我找到了这个问题的解决方案。导致此错误的主要问题可能是由于某些图像正在同时使用,并且python可能无法执行操作图像的功能。我重新启动了我的电脑,问题解决了。非常感谢您在下面的所有答案。对于任何其他可能的解决方案或原因,请随时发表更多评论

解决方法

有一个神秘的错误。我找不到任何线索。如果库不重要,可以使用 opencv 进行图像操作。我测试过,它适用于 tiff 文件。

安装

$ pip install opencv-python
or
$ pip3 install opencv-python

源代码

import cv2
import shutil
import os

dir_name = "C:/Users/fyp/test1/"
test = os.listdir(dir_name)
destDirectory = "C:/Users/fyp/test2/"

for item in test:
    if item.endswith(".tif"):
        img = cv2.imread(dir_name + item)
        imgResize = cv2.resize(img,(224,224),interpolation = cv2.INTER_AREA)
        cv2.imwrite(destDirectory + item[:-4] + '.tif',imgResize)