【发布时间】:2020-10-06 05:08:10
【问题描述】:
我正在尝试解决 Python 中需要将 TIFF 图像转换为 JPEG 的问题。我曾尝试使用 Pillow 和 OpenCV 来执行此操作,但是当我尝试转换保存了透明度的 TIFF 图像时不断出错。如果我保存 TIFF 并删除透明度,它将成功保存 JPEG。透明度必须保留在 TIFF 上。有谁知道这个问题的解决方案?如果我能找到一种方法,甚至可以通过 Python 脚本在没有透明度的情况下保存 TIFF,将其另存为 JPEG,然后在没有透明度的情况下删除 TIFF 也可以。在这里的任何帮助将不胜感激。以下是我尝试过的失败代码示例:
import os
from PIL import Image
os.chdir('S:/DAM/Test/Approved/')
# for root, dirs, files in os.walk('S:/DAM/Test/Approved'):
for root, dirs, files in os.walk('.'):
for name in files:
if name.endswith('.tif'):
filename = os.path.join(root, name)
print('These are the files: ', filename)
# img = Image.open(filename).convert('RGB')
img = Image.open(filename)
print('image is open', filename)
img = img.convert('RGB')
print('image should be converted: ', filename)
imageResize = img.resize((2500, 2500))
print('image should be resized: ', filename)
imageResize.save(filename[:-4]+'.jpg', 'JPEG')
print('image should be saved as a jpeg: ', filename)
这是我在 Python 尝试使用 Pillow 以透明方式打开 TIFF 时遇到的错误:
Exception has occurred: UnidentifiedImageError
cannot identify image file '.\\Beauty Images\\XXX.tif'
File "U:\Python files\image_conversion2.py", line 22, in <module>
img = Image.open(filename)
当我使用 OpenCV 运行此代码时,它也会在同一图像上失败:
img = cv2.imread('S:/DAM/Test/Approved/Beauty Images/XXX.tif')
cv2.imwrite('S:/DAM/Test/Approved/Beauty Images/XXX.jpg', img)
这是我使用此代码时遇到的错误:
OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:715: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'
File "U:\Python files\img_convert_new.py", line 19, in <module>
cv2.imwrite('S:/DAM/Test/Approved/Beauty Images/XXX.tif', img)
【问题讨论】:
-
尝试使用 ImageMagick 并运行“identify -verbose XXX.tif”或分享此图像。见stackoverflow.com/q/22170601/13226440
-
@Alex Alex,ImageMagick 会为这个问题做些什么?
-
ImageMagick 将提供有关图像的信息。特别是关于 Alpha 通道。此问题的进一步解决方案取决于此信息。
-
@Alex Alex,我没有安装 ImageMagick。在没有 ImageMagick 的情况下还有其他方法可以获取这些信息吗?
-
也许 OpenCV/PIL 无法读取 CMYKA 图像。我不知道全部限制。 ImageMagick 和 Python Wand 可以读取它们,但您必须安装 ImageMagick。如果您在 Linux 上,则它已经安装。 OpenCV/PIL 已阅读它,然后您可以制作副本并删除 alpha 通道,然后从副本中保存,如果您需要将 alpha 通道保留在原始 TIFF 中。在 OpenCV/PIL 中移除 alpha 通道不会改变磁盘文件。它只会更改已读取的内存版本。您可以发布指向您的 TIFF 文件的链接吗?
标签: python opencv image-processing python-imaging-library tiff