はじめに
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"といった名前でも指定できます。画像のサイズを小さくできますが、半面、精細感が失われます。 |
その他
- あとは、pngとgifについて、解説記事を書きたいです。
- 蛇足。JPEGの量子化テーブルは普通に『Q Table』なんですね。動画のエンコーダー & デコーダーを開発していたときは、『キューマト(Q Matrixの略)』って呼んでました。
参考リンク