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))
メモ
ggplot2
のggsave()
でtiffを書き出すときはcompression="lzw"
をつければいいが、今回はggplot2で書き出したファイルに少し加工を加える必要があったので、わざわざpythonでやることになった。
Inkscapeも裏はpython動いてるみたいなので、うまくプラグイン的なのを作ることもできそう。