使用python加载CCITT T.3压缩tiff的最佳方法是什么?

时间:2010-07-28 18:06:07

标签: python compression tiff imaging image-formats

我正在尝试将CCITT T.3压缩的tiff加载到python中,并从中获取像素矩阵。它应该只是一个逻辑矩阵。

我尝试过使用pylibtiff和PIL,但是当我用它们加载它时,它返回的矩阵是空的。我已经在很多地方读过这两个工具支持加载CCITT而不是访问像素。

我愿意转换图像,只要我可以从中获取逻辑矩阵并在python代码中执行。疯狂的是,如果我在油漆中打开我的一个图像,保存它而不改变它,然后尝试用pylibtiff加载它,它的工作原理。油漆将其重新压缩为LZW压缩。

所以我想我真正的问题是:有没有办法将CCITT图像原生加载到matricies或使用python将图像转换为LZW?

谢谢,

tylerthemiler

2 个答案:

答案 0 :(得分:1)

似乎最好的方法是不要完全使用Python,而是依靠netpbm

import Image
import ImageFile
import subprocess

tiff = 'test.tiff'
im = Image.open(tiff)
print 'size', im.size
try:
    print 'extrema', im.getextrema()
except IOError as e:
    print 'help!', e, '\n'

print 'I Get by with a Little Help from my Friends'
pbm_proc = subprocess.Popen(['tifftopnm', tiff],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE)
(pbm_data, pbm_error) = pbm_proc.communicate()
ifp = ImageFile.Parser()
ifp.feed(pbm_data)
im = ifp.close()
print 'conversion message', pbm_error,
print 'extrema', im.getextrema()
print 'size', im.size
# houston: we have an image
im.show()

似乎可以做到这一点:

$ python g3fax.py 
size (1728, 2156)
extrema help! decoder group3 not available 

I Get by with a Little Help from my Friends
conversion message tifftopnm: writing PBM file
extrema (0, 255)
size (1728, 2156)

答案 1 :(得分:0)

如何tiffcpsubprocess一起转换为LZW(-c lzw切换),然后使用pylibtiff正常处理?网络上有tiffcp的Windows版本。不完全是Python原生的解决方案,但仍然......