Записать файл TIFF в python из строки

Мне нужен способ легко записать сжатый файл TIFF из строки в python. Я уже смотрю библиотеку изображений Python PIL, но мне нужно написать очень специфический формат TIFF и На данный момент PIL поддерживает только несжатые файлы. Мне нужно написать сжатый LZW полосатый TIFF с одной простой строкой текста. Я бы предпочел не писать что-то с нуля, но если придется, то сделаю.


person keepitreall89    schedule 10.03.2011    source источник
comment
В итоге я просто использовал код .NET, который у меня был, который сделал это, и экспортировал его в исполняемый файл командной строки, а затем вызвал его вместо tiffCP, в основном то же самое, но у меня уже были все настройки, установленные в моем инструменте .NET, поэтому я не нужно было беспокоиться ни о чем из python, просто передайте ему строку.   -  person keepitreall89    schedule 18.03.2011


Ответы (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) просто добавляет возможность писать сжатые файлы TIFF с использованием стандартной библиотеки PIL, поэтому, если вы записали свой текст в объект PIL Image, реализовать его должно быть очень просто.

person Blender    schedule 10.03.2011
comment
Хороший трюк, хотя обратите внимание, что для этого требуется инструмент командной строки, который может быть не установлен, особенно в Windows. Вы можете получить версию tiffcp для Windows здесь: verypdf.com/tif2pdf/image2pdf_emf2pdf_cmd.zip - person kindall; 10.03.2011
comment
Когда вы используете Linux, вы просто забываете обо всех этих вещах. Спасибо что подметил это. - person Blender; 10.03.2011

Я только что использовал WinPython для записи файла TIFF со сжатием LZW:

from PIL import Image, TiffImagePlugin

[...]

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

(См. этот билет WinPython).

(Правка 2014-05-13: исправлена ​​путаница с READ_LIBTIFF/WRITE_LIBTIFF).

(Изменить 23 февраля 2015 г.: обновлена ​​ссылка на WinPython).

person Robert Pollak    schedule 12.05.2014