2013-09-24 84 views
4

我们在服务器中获得了来自工业传感器的50TB 16位无压缩TIF图像,我们希望通过使用python进行无损压缩压缩来压缩它们。使用Python,因为它更容易使用Python来沟通我们的数据库。如何在python中将图像转换为16位zip(放气)压缩的TIF?

但经过几个小时的搜索和文档阅读,我发现甚至没有一个成熟的python库可以将16位TIF转换为zip压缩tif。最新的PIL无法将压缩的tif,OpenCV硬编码的输出文件写入LZW tif not zip(deflate)。并且在smc.freeimage,PythonImageMagick中没有足够的文档,所以我不知道他们是否可以这样做。我也发现这个tifffile.py,在它的源代码中似乎有一些关于压缩的东西,但没有示例代码让我明白如何配置输出压缩选项。

当然,我可以使用外部可执行文件,但我不想在这里使用python作为脚本语言。

所以,如果有人给我一个有效的例子,我真的很感激,谢谢。

更新:

cgohlke的代码工作,在这里我提供了另一种重量轻的解决方案。 从这里签出修补过的pythontifflib代码https://github.com/delmic/pylibtiff

来自谷歌代码的原始PythonTiffLib不能很好地处理RGB信息,它不能处理我的数据,这个修补版本可以工作,但是因为代码很老,这意味着PythonTiffLib可能不能很好地维护。

使用这样的代码:

from libtiff import TIFF 

tif = TIFF.open('Image.tiff', mode='r') 
image = tif.read_image() 

tifw = TIFF.open('testpylibtiff.tiff', mode='w') 
tifw.write_image(image, compression='deflate', write_rgb=True) 
+0

如果你找不到任何专门在Python中完成这项工作的东西,并且有外部可执行文件,当它通过正确的参数时,为你做了正确的工作。那么我认为你应该使用'sys.call'或'subprocess.call'。 –

+0

@ hus787,谢谢,那将是我最后的选择。 –

+0

@ cgohlke,你好,我不认为tifffile可以保存压缩的tiff。我在看旧的Pylibtiff。 –

回答

3

PythonMagick为我工作在Windows上:

from PythonMagick import Image, CompressionType 
im = Image('tiger-rgb-strip-contig-16.tif') 
im.compressType(CompressionType.ZipCompression) 
im.write("tiger-rgb-strip-contig-16-zip.tif") 

Scikit图像包括FreeImage库文件的包装:

import skimage.io._plugins.freeimage_plugin as fi 
im = fi.read('tiger-rgb-strip-contig-16.tif') 
fi.write(im, 'tiger-rgb-strip-contig-16-zip.tif', 
     fi.IO_FLAGS.TIFF_ADOBE_DEFLATE) 

或者通过tifffile.py,2013.11.03或更高版本:

from tifffile import imread, imsave 
im = imread('tiger-rgb-strip-contig-16.tif') 
imsave("tiger-rgb-strip-contig-16-zip.tif", im, compress=6) 

这些可能不会保留所有其他TIFF标记或属性,但未在问题中指定。

+0

非常感谢,花了一些时间安装PythonMagick之后,它最终运行得非常好,我没有测试它的速度,但是通过它的依赖关系,我猜PythonMagick会非常高效。 –

+0

添加PythonMagick的下载链接,用于linux http://www.imagemagick.org/download/python/。对于Windows,http://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonmagick。现在的问题是PythonMagick可能会在群集上安装麻烦 –

相关问题