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

标签 python image-processing tiff

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

然而,经过数小时的搜索和文档阅读,我发现甚至没有一个成熟的 python 库可以将 16 位 TIF 转换为 zip 压缩的 tif。最新的 PIL 无法将压缩的 tif、OpenCV 硬编码输出文件写入 LZW tif 而不是 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)

最佳答案

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 标签或属性,但问题中未指定。

关于python - 如何在 python 中将图像转换为 16 位 zip (deflate) 压缩的 TIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18972968/

相关文章:

python - 如何在一张 map 上绘制多个GeoDataFrame(重叠)?

python - 用字典中的值替换列表中的单词

image - 在Matlab中将彩色像素添加到灰度图像

python-2.7 - Python Opencv 2.4.X 摄像机错误

python - 如何使用 python 最好使用 pil 检测 tif 图像是否有图层

python - 是否可以在 python 中加载和显示大(8296 x 14740 像素)图像?

python - 如何获取通过 BlobstoreUploadHandler 上传的文件的 FileInfo/gcs file_name?

python - 对于 thread.run() 来说 _MainThread 在这里意味着什么?

image-processing - 如何将 3d 图像转换为 2d 图像

java - 将 TIF/TIFF 转换为 JPG : Bad endianness tag