概念¶
Python Imaging Library は、*ラスター画像*、つまりピクセルデータの矩形を処理します。
バンド¶
画像は、1つ以上のデータバンドで構成できます。 Python Imaging Library を使用すると、すべてのバンドの寸法と深さが同じであれば、複数のバンドを1つの画像に格納できます。 たとえば、PNG 画像には、赤、緑、青、およびアルファ透明度の値を表す「R」、「G」、「B」、および「A」バンドが含まれている場合があります。 多くの操作は、ヒストグラムなど、各バンドで個別に動作します。 各ピクセルがバンドごとに1つの値を持つと考えることがよくあります。
画像内のバンドの数と名前を取得するには、getbands()
メソッドを使用します。
モード¶
画像の mode
は、画像内のピクセルの種類と深さを定義する文字列です。 各ピクセルは、ビット深度の全範囲を使用します。 したがって、1ビットピクセルの範囲は0〜1、8ビットピクセルの範囲は0〜255、32ビット符号付き整数ピクセルの範囲はINT32、32ビット浮動小数点ピクセルの範囲はFLOAT32です。 現在のリリースでは、次の標準モードがサポートされています。
1
(1ビットピクセル、白黒、バイトあたり1ピクセルで格納)
L
(8ビットピクセル、グレースケール)
P
(8ビットピクセル、カラーパレットを使用して他のモードにマッピング)
RGB
(3x8ビットピクセル、トゥルーカラー)
RGBA
(4x8ビットピクセル、透明マスク付きトゥルーカラー)
CMYK
(4x8ビットピクセル、色分解)
YCbCr
(3x8ビットピクセル、カラービデオフォーマット)
これは、ITU-R BT.2020 標準ではなく、JPEG 標準を指すことに注意してください。
LAB
(3x8ビットピクセル、L * a * b色空間)
HSV
(3x8ビットピクセル、色相、彩度、明度色空間)
色相の0〜255の範囲は、0度<=色相<360度のスケールバージョンです。
I
(32ビット符号付き整数ピクセル)
F
(32ビット浮動小数点ピクセル)
Pillow は、次のような、いくつかの追加モードについても限定的にサポートしています。
LA
(アルファ付きL)
PA
(アルファ付きP)
RGBX
(パディング付きトゥルーカラー)
RGBa
(乗算済みアルファ付きトゥルーカラー)
La
(乗算済みアルファ付きL)
I;16
(16ビット符号なし整数ピクセル)
I;16L
(16ビットリトルエンディアン符号なし整数ピクセル)
I;16B
(16ビットビッグエンディアン符号なし整数ピクセル)
I;16N
(16ビットネイティブエンディアン符号なし整数ピクセル)
乗算済みアルファとは、他の各チャンネルの値にアルファを掛けたものです。 たとえば、(10, 20, 30, 127)
の RGBA ピクセルは、(5, 10, 15, 127)
の RGBa ピクセルに変換されます。 R、G、B チャンネルの値は、アルファチャンネルの半透明の結果として半分になります。
これらの追加モードとは別に、Pillow は、チャンネルあたり8ビットを超える深さのマルチチャンネル画像をまだサポートしていません。
Pillow は、ユーザー定義モードもサポートしていません。 上記にリストされていないバンドの組み合わせを処理する必要がある場合は、Image オブジェクトのシーケンスを使用してください。
画像のモードは、mode
属性から読み取ることができます。 これは、上記の値のいずれかを含む文字列です。
サイズ¶
画像サイズは、size
属性から読み取ることができます。 これは、ピクセル単位の水平方向と垂直方向のサイズを含む2要素のタプルです。
座標系¶
Python Imaging Library は、左上隅を (0,0) とするデカルトピクセル座標系を使用します。 座標は、暗黙のピクセルの隅を指すことに注意してください。 (0, 0) としてアドレス指定されたピクセルの中心は、実際には (0.5, 0.5) にあります。
座標は通常、2要素のタプル (x, y) としてライブラリに渡されます。 矩形は、左上隅が最初に指定された4要素のタプル (x1, y1, x2, y2) として表されます。
パレット¶
パレットモード (P
) は、カラーパレットを使用して各ピクセルの実際の色を定義します。
情報¶
info
属性を使用して、画像に補助情報を添付できます。 これは辞書オブジェクトです。
画像ファイルのロードと保存時にそのような情報がどのように処理されるかは、ファイル形式ハンドラ次第です (画像ファイル形式 の章を参照)。 ほとんどのハンドラは、画像をロードするときに info
属性にプロパティを追加しますが、画像を保存するときは無視します。
透明度¶
画像にアルファバンドがない場合、透明度は info
属性で「transparency」キーを使用して指定できます。
ほとんどの場合、「transparency」値は単一の整数であり、「1」、「L」、「I」、または「P」モードの画像でどのピクセル値が透明かを表します。 ただし、PNG 画像には3つの値 (「RGB」モードの画像の各チャンネルに1つ) が含まれている場合や、「P」モードの画像のバイト文字列が含まれている場合があり、各パレットエントリのアルファ値を指定できます。
方向¶
JPGおよびTIFF画像のinfo
属性の一般的な要素は、EXIF方向タグです。これは、画像データの方向を指示するものです。たとえば、画像を90度回転させたり、反転させたりするよう指示する場合があります。この情報を画像に適用するには、exif_transpose()
を使用できます。
フィルタ¶
複数の入力ピクセルを単一の出力ピクセルにマッピングする可能性のあるジオメトリ操作のために、Python Imaging Libraryは異なるリサンプリング*フィルタ*を提供します。
- Resampling.NEAREST
入力画像から最も近いピクセルを1つ選択します。他のすべての入力ピクセルは無視します。
- Resampling.BOX
ソース画像の各ピクセルは、同じ重みでデスティネーション画像の1ピクセルに寄与します。アップスケーリングの場合、
Resampling.NEAREST
と同等です。このフィルタは、resize()
およびthumbnail()
メソッドでのみ使用できます。バージョン 3.4.0 で追加されました。
- Resampling.BILINEAR
リサイズの場合、出力値に寄与する可能性のあるすべてのピクセルに対して線形補間を使用して、出力ピクセル値を計算します。他の変換では、入力画像の2x2環境での線形補間が使用されます。
- Resampling.HAMMING
Resampling.BILINEAR
よりも鮮明な画像を生成し、Resampling.BOX
のように局所的なレベルでずれがありません。このフィルタは、resize()
およびthumbnail()
メソッドでのみ使用できます。バージョン 3.4.0 で追加されました。
- Resampling.BICUBIC
リサイズの場合、出力値に寄与する可能性のあるすべてのピクセルに対して三次補間を使用して、出力ピクセル値を計算します。他の変換では、入力画像の4x4環境での三次補間が使用されます。
- Resampling.LANCZOS
出力値に寄与する可能性のあるすべてのピクセルに対して、高品質のランチョスフィルタ(切り捨てられたsinc)を使用して、出力ピクセル値を計算します。このフィルタは、
resize()
およびthumbnail()
メソッドでのみ使用できます。バージョン 1.1.3 で追加されました。
フィルタ比較表¶
フィルタ |
ダウンスケーリング品質 |
アップスケーリング品質 |
パフォーマンス |
---|---|---|---|
⭐⭐⭐⭐⭐ |
|||
⭐ |
⭐⭐⭐⭐ |
||
⭐ |
⭐ |
⭐⭐⭐ |
|
⭐⭐ |
⭐⭐⭐ |
||
⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
|
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐ |