如何在python中将图像转换为16位zip(deflate)压缩TIFF?

时间:2013-09-24 04:28:17

标签: python image-processing tiff

我们的服务器中的工业传感器获得了50TB的16位无压缩TIF图像,我们希望使用python进行无损压缩压缩。使用python是因为使用Python来传达我们的数据库更容易。

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

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

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

更新

cgohlke的代码有效,在这里我提供了另一种轻量级的解决方案。 从这里https://github.com/delmic/pylibtiff查看修补后的pythontifflib代码。

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

使用如下代码:

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)

1 个答案:

答案 0 :(得分: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-image包含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标签或属性,但问题中未指定。