从字符串在Python中写入TIFF文件
我需要一种简单的方法,用Python把一个字符串写成压缩的TIFF文件。我已经查看过Python图像库(PIL),但是我需要写一种非常特定的TIFF格式,而PIL目前只支持未压缩的格式。我需要写一个使用LZW压缩的、带有条纹的TIFF文件,里面只包含一行简单的文本。我不太想从头开始写代码,但如果必须的话,我也会去做。
2 个回答
5
我刚刚使用了WinPython来写一个带有LZW压缩的TIFF文件:
from PIL import Image, TiffImagePlugin
[...]
TiffImagePlugin.WRITE_LIBTIFF = True
im.save(filename, compression = "tiff_lzw")
TiffImagePlugin.WRITE_LIBTIFF = False
(查看这个WinPython的反馈)。
(编辑于2014-05-13:我纠正了自己对READ_LIBTIFF和WRITE_LIBTIFF的混淆)。
(编辑于2015-02-23:更新了WinPython的链接)。
1
我以前用过这段代码,所以可以肯定它是有效的。这段脚本来自1997年,而PIL库到现在为止还没有实现压缩TIFF文件的写入功能。
#
# use "tiffcp" to write compressed TIFF files.
#
# fredrik lundh (may 13, 1997)
#
import os, tempfile
# install standard driver
import Image, TiffImagePlugin
LZW = "lzw"
ZIP = "zip"
JPEG = "jpeg"
PACKBITS = "packbits"
G3 = "g3"
G4 = "g4"
def _save(im, fp, filename):
# check compression mode
try:
compression = im.encoderinfo["compression"]
except KeyError:
# use standard driver
TiffImagePlugin._save(im, fp, filename)
else:
# compress via temporary file
if compression not in (LZW, ZIP, JPEG, PACKBITS, G3, G4):
raise IOError, "unknown compression mode"
file = tempfile.mktemp()
im.save(file, "TIFF")
os.system("tiffcp -c %s %s %s" % (compression, file, filename))
try: os.unlink(file)
except: pass
Image.register_save(TiffImagePlugin.TiffImageFile.format, _save)
if __name__ == "__main__":
# test
im = Image.open("/usr/iv/tip/images/lenna.ppm")
im = im.point(lambda v: v >= 128 and 255, "1")
im.save("lenna.tif", compression=G4)
这段代码(据我所知)只是增加了使用标准PIL库写入压缩TIFF文件的功能,所以如果你已经把文本写入了一个PIL的Image
对象,使用起来应该非常简单。