【问题标题】:Write TIFF file in python from String从字符串在python中写入TIFF文件
【发布时间】:2011-07-12 21:10:50
【问题描述】:

我需要一种方法来轻松地从 python 中的字符串编写压缩的 TIFF 文件。我已经看过 Python Imaging Library PIL 但我需要编写一个非常具体的 TIFF 格式,而 PIL 目前只支持未压缩的。我需要编写一个 LZW 压缩的条纹 TIFF,其中只有一行简单的文本。我宁愿不必从头开始写东西,但如果我这样做了。

【问题讨论】:

  • 我最终只使用了执行此操作的 .NET 代码并将其导出到命令行 exe,然后调用它而不是 tiffCP,基本上相同,但我已经设置了所有设置在我的 .NET 工具中,所以我不必担心 python 中的任何内容,只需传递一个字符串。

标签: python image tiff


【解决方案1】:

我刚刚用WinPython写了一个LZW压缩的TIFF文件:

from PIL import Image, TiffImagePlugin

[...]

TiffImagePlugin.WRITE_LIBTIFF = True
im.save(filename, compression = "tiff_lzw")
TiffImagePlugin.WRITE_LIBTIFF = False

(见this WinPython ticket)。

(2014-05-13 编辑:修复了我的 READ_LIBTIFF/WRITE_LIBTIFF 混淆)。

(编辑 2015-02-23:更新了 WinPython 链接)。

【讨论】:

    【解决方案2】:

    我过去曾使用过此代码,所以我可以说它有效。此脚本来自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)
    

    此代码(afaict)只是添加了使用标准 PIL 库编写压缩 TIFF 的功能,因此,如果您已将文本写入 PIL Image 对象,它应该很容易实现。

    【讨论】:

    • 不错的技巧,但请注意,这确实需要一个可能未安装的命令行工具,尤其是在 Windows 上。您可以在此处获取 Windows 版本的 tiffcp:verypdf.com/tif2pdf/image2pdf_emf2pdf_cmd.zip
    • 当您使用 Linux 时,您会忘记所有这些事情。感谢您指出这一点。
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2017-11-29
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多