如何使用Python PIL设置TIFF图像分辨率

时间:2015-09-16 08:46:46

标签: python python-imaging-library

我使用以下脚本来设置tiff图像的分辨率:

from PIL import Image
im=Image.open('abc.bmp')
im.info
im=im.convert('1')
im.info
im.save('abc.tif')

我可以清楚地看到图像的分辨率是('dpi':( 300,300)),我假设输出TIFF图像应该具有300 DPI的分辨率。但是,当我读取TIFF文件的头文件信息时,输出分辨率是未定义的。关于设定分辨率的任何想法?感谢。

1 个答案:

答案 0 :(得分:3)

我已经使用ImageMagick的identify程序来读取文件元数据。我的源文件是venerable Lena image,其中包含:

$ identify -verbose lena.jpg
…
Resolution: 72x72
…

其中分辨率包含在JFIF块中。 PIL†似乎没有在Image.open中翻译此JFIF块:

>>> im = Image.open('lena.jpg')
>>> im.info 
{'exif': b'Exif\x00\x00II*\x00\x08…',
 'jfif': 257,
 'jfif_density': (1, 1),
 'jfif_unit': 0,
 'jfif_version': (1, 1)}

但是,您可以指定TIFF输出的分辨率

>>> im.save('lena.tiff', dpi=(300, 300))
>>> lena = Image.open('lena.tiff')
>>> lena.info
{'compression': 'raw', 'dpi': (300.0, 300.0)}

identify同意

$ identify -verbose lena.tiff
…
  Resolution: 300x300
…

†关于PIL明显死亡的说明

据我所知,由last release of PIL was in 2009取代的Pillow Project似乎位于active development。不幸的是,Pillow没有改变包名,所以如果你写的话:

import PIL

from PIL import Image

除了

之外,您已经知道如何知道您正在使用哪个库
>>> PIL.PILLOW_VERSION 

它应该在PIL下产生一个NameError但在Pillow下产生一个版本号(' 2.9.0'是最新版本)。

如果你使用的是PIL,而不是Pillow,我不知道上面的答案是否适合你,而且我已经达到了今天我想读的PIL-ish代码的限制。