无法在PIL中对16位TIF应用图像滤镜
我在用Python的PIL库来处理图片滤镜。代码写得很简单:
im = Image.open(fnImage)
im = im.filter(ImageFilter.BLUR)
这段代码在PNG、JPG和8位的TIF图片上都能正常工作。但是,当我尝试在16位的TIF图片上使用这段代码时,就出现了以下错误:
ValueError: image has wrong mode
需要注意的是,PIL可以正常加载、调整大小和保存16位的TIF图片,所以我猜这个问题可能和滤镜有关。不过,ImageFilter的文档里并没有提到对16位的支持。
有没有办法解决这个问题呢?
2 个回答
0
要继续前进,可以试试使用 ImageMagick,并寻找与这个程序相关的 PythonMagick 接口。在命令提示符下,你可以使用 convert.exe image-16.tiff -blur 2x2 output.tiff
这个命令来处理图片。不过我在我的 Windows 操作系统上没能成功安装 PythonMagick,因为它的源代码需要编译。
16
你的TIFF图片的模式很可能是"I;16"。在当前版本的ImageFilter中,滤镜只能应用于"L"和"RGB"格式的图片(可以查看ImageFilter.py的源代码)。
你可以先尝试转换成其他格式:
im.convert('L')
如果转换失败,可以试试:
im.mode = 'I'
im = im.point(lambda i:i*(1./256)).convert('L').filter(ImageFilter.BLUR)
备注:可能与Python和16位TIFF的问题重复。