Pythonの画像処理ライブラリPillow(PIL)の読込み・保存まとめ (JPEG編)


はじめに

Pythonの画像処理ライブラリPillowは、手軽に画像の読み込み~加工~保存ができる大変便利なライブラリです。ただし、画像の読込み・保存の詳細について、日本語で書かれたものが少なかったのでまとめました。
本稿は、JPEGの読込み・保存について記載します。
情報は2021年7月時点のものです。PillowのWebページの情報をもとにしました。

JPEGの読込み

読込み & パラメータ表示の例

open.py
from PIL import Image
im = Image.open("./input.jpg")
print(im.info.items())

読込みパラメータ一覧

読込んだ画像のパラメータは、オブジェクトのinfoプロパティに、ディクショナリ形式で格納されます。

パラメータ 説明
jfif .jfifファイル = True
jfif_version jtifのバージョン番号(メジャー, マイナー)
jfif_density 水平、垂直 解像度(画素密度)
jfif_unit 解像度の単位(0 : 単位なし、1 : dpi、2 : dpcm)
dpi dpi(水平、垂直)
adobe Adobe JPEGファイル = True
adobe_transform ベンダー固有のタグ
progression プログレッシブJPEG = True
icc_profile ICCプロファイルの内容
exif EXIFデータの内容
comment コメントの内容

JPEGの保存

Image.save(fp, format=None, **params)

  • fp : ファイル名、pathlib.Pathオフジェクト、またはファイルオブジェクト
  • format : 保存するファイル形式(省略可)
  • params : 保存するパラメータ(省略可)

保存の例

save.py
from PIL import Image
im = Image.open("./input.jpg")
im.save('./output.jpg', 'JPEG' ,quality=95, optimize=True, progressive=True, dpi=im.info.get('dpi'), icc_profile=im.info.get('icc_profile'), exif=im.info.get('exif'), subsampling=-1, qtables='keep')

保存パラメータ一覧

パラメータ 説明
quality 保存画像の品質。0(最低)~95(最高)。初期値は75。(95以上は使用しない)
optimize True = 最適化して保存
progressive True = プログレッシブJPEGで保存
dpi dpi(水平、垂直)の指定
icc_profile True = ICCプロファイルを保存。既存のプロファイルを指定する場合 = icc_profile=im.info.get('icc_profile')
exif 保存するEXIFデータの指定
subsampling 色差成分の保存形式を指定。 -1 : 元のフォーマット、 0 : 4:4:4、 1 : 4:2:2、 2 : 4:2:0
qtables エンコーダーで使用するQテーブルの指定。64個の整数のリストやディクショナリ形式でも指定できますが、"keep"、”web_low”、"web_high"といった名前でも指定できます。画像のサイズを小さくできますが、半面、精細感が失われます。

その他

  1. あとは、pngとgifについて、解説記事を書きたいです。
  2. 蛇足。JPEGの量子化テーブルは普通に『Q Table』なんですね。動画のエンコーダー & デコーダーを開発していたときは、『キューマト(Q Matrixの略)』って呼んでました。

参考リンク