Inkscapeで作ったtiffファイルをpythonで圧縮する

compressed plastic bottlesprogramming

Inkscapeではtiffでエクスポートするときに圧縮が選べなくてファイルサイズがインフレしたので、Pythonのtifffileでまとめて圧縮したときのメモ

必要なパッケージ

pip install tifffile 
pip install imagecodecs #これがインストールされてなくてハマった

コード本体

pathに保存してあるtiffファイルをまとめて処理する。

処理後のファイルは_lzw.tiffを付加して同じフォルダに保存している。

#python
import os
from tifffile import TiffFile, imwrite

# フォルダ内のすべてのTIFFファイルを取得
path = "処理するTIFFファイルが入ってるフォルダへのパス"
files = [file for file in os.listdir(path) if file.endswith(".tif") or file.endswith(".tiff")]

# すべてのTIFFファイルをLZW圧縮されたTIFFファイルに変換
for tiff_file in files:

    # TIFFファイルを読み込む
    full_path = os.path.join(path, tiff_file)
    print(full_path)
    with TiffFile(full_path) as tif:

        #DPI情報をとっておく
        x_dpi = tif.pages[0].tags.get(282, None)
        x_dpi = round(x_dpi.value[0] / x_dpi.value[1])
        y_dpi = tif.pages[0].tags.get(283, None)
        y_dpi = round(y_dpi.value[0] / y_dpi.value[1])
        # unit_dpi = tif.pages[0].tags.get(296, None)

        #新しいファイル名を設定
        new_tiff_file = os.path.join(path, os.path.splitext(tiff_file)[0] + "_lzw.tiff")
        #DPIを設定し保存する
        img = tif.asarray()
        imwrite(new_tiff_file, img, compression="lzw", resolution=(x_dpi, y_dpi))

メモ

ggplot2ggsave()でtiffを書き出すときはcompression="lzw"をつければいいが、今回はggplot2で書き出したファイルに少し加工を加える必要があったので、わざわざpythonでやることになった。

Inkscapeも裏はpython動いてるみたいなので、うまくプラグイン的なのを作ることもできそう。