问题描述
我目前正在使用 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)