我正在尝试更改PNG图像的dpi并使用Pillow / PIL将其转换为TIFF,
from PIL import Image
import os
for fl in os.listdir(os.getcwd()):
name, ext = fl.split(".")
im = Image.open(fl)
im.save(name + ".tiff", dpi=(500,500), compression="tiff_jpeg")
print("Done '{}'".format(name))
如果没有设置compression
kwarg,它可以正常工作,但我最终得到了来自我的1MB PNG的100MB TIFF文件。如果我将压缩类型设置为任何可用的options,我最终会出现以下错误:
Traceback (most recent call last):
File "<ipython-input-1-3631f05e05f4>", line 7, in <module>
im.save(name + ".tiff", dpi=(500,500), compression="tiff_jpeg")
File "C:\Users\Patrick\Anaconda3\lib\site-packages\PIL\Image.py", line 1687, in save
save_handler(self, fp, filename)
File "C:\Users\Patrick\Anaconda3\lib\site-packages\PIL\TiffImagePlugin.py", line 1457, in _save
raise IOError("encoder error %d when writing image file" % s)
OSError: encoder error -2 when writing image file
在Image.save方法的文档中,它提到压缩仅在我安装了libtiff库时才可用。
以下是我与之合作的Python和Pillow的版本:
Python 3.5.1 |Anaconda 4.0.0 (64-bit)| (default, Feb 16 2016, 09:49:46) [MSC v.1900 64 bit (AMD64)] on win32
libtiff: 4.0.6-vc14_2 [vc14]
pillow: 3.2.0-py35_1
可能导致此错误的原因以及我可以采取哪些步骤来解决?这是我第一次使用Pillow / PIL并且不确定从哪里开始。
答案 0 :(得分:1)
我被自己咬了一口,所以我觉得尽管有几个月的问题,我还是会分享我的发现。
tiff_jpeg
压缩是指“旧式”JPEG编码的TIFF文件,现在已过时。使用compression='jpeg'
代替compression='tiff_jpeg'
为我工作。
compression
目前可以在https://github.com/python-pillow/Pillow/blob/master/PIL/TiffImagePlugin.py的COMPRESSION_INFO
字典中找到tiff_lzw
的可用选项。文档中未提及{{1}}压缩,但在Windows上使用Pillow 3.4为我创建LZW编码的TIFF。