1. 画像フォーマットの判別
対応している画像フォーマット
Pillowは以下のような多くの画像フォーマットをサポートしているよ:
- JPEG (JPG): 写真用の最も普及しているフォーマットの1つ。品質を犠牲にして圧縮するけど、すごくファイルサイズを減らせる。透明性はサポートしていない。
- PNG: ロスレスフォーマットで透明性(アルファチャンネル)をサポートしている。ロゴやアイコン、鮮明さが必要な画像に適している。
- BMP: 圧縮なしで高品質だが、ファイルサイズが大きいフォーマット。透明性をサポートしている。
- TIFF: ロスレス画像保存によく使われるフォーマット。印刷業界でよく利用される。
- WEBP: 現代的なフォーマットで、圧縮率が高く、透明性をサポートしている。ウェブ画像に最適で、高品質で小さなファイルサイズを提供する。
変換のための画像読み込み
画像を変換する前に、Image.open()
メソッドを使って読み込む必要がある。
from PIL import Image
# 画像を開く
image = Image.open("example.jpg")
print(image.format) # 元の画像フォーマットを確認する
2. 画像を別のフォーマットに変換する
save()
メソッドを使うと、ファイル名の拡張子を変更するか、フォーマットを明示的に指定することでさまざまなフォーマットに保存できる。
JPEGをPNGに変換
JPEGからPNGに変換するには、保存時に新しい拡張子を指定するだけだよ:
# PNGフォーマットで画像を保存
image.save("example_converted.png")
このコードは、JPEGフォーマットの画像をPNGフォーマットに変換し、指定した名前で保存する。PNGはロスレス保存に最適で、透明な領域もサポートしている。
PNGをJPEGに変換
PNGからJPEGへの変換も可能。ただし、JPEGは透明性をサポートしていないので、透明な領域は白で塗りつぶされる点に注意。
# PNGをJPEGに変換(透明性は白背景に置き換えられる)
image = image.convert("RGB") # JPEGに必要なRGBモードに切り替え
image.save("example_converted.jpg", "JPEG")
convert("RGB")
メソッドは、JPEGが透明領域をサポートしていないため、RGBモードに切り替えるために使用される。これがJPEGフォーマットへの保存に必要。
3. 画像の品質管理
Pillowではquality
とoptimize
パラメータを使って品質とファイルサイズを制御できる。特にJPEGとPNGに便利だよ。
JPEGの品質と最適化
JPEGを保存する際、quality
パラメータで圧縮率を調整できる。品質値が高いほどファイルサイズが大きく、画質も良くなる。quality
の値は1から95まで設定可能(デフォルトは75)。
# 品質を下げてJPEG画像を保存
image.save("example_compressed.jpg", "JPEG", quality=85)
このコードは品質85で画像を保存する。通常、良好な画質を保ちながらファイルサイズを縮小できる。ミニチュア画像を作る場合はquality = 50
などの低品質も指定可能。
PNGの最適化
PNGの場合、optimize = True
パラメータを指定すると、余分なデータを削除してロスレス圧縮する。これはインターネットで画像を公開する際に特に役立つ。
# 最適化されたPNGを保存
image.save("example_optimized.png", "PNG", optimize=True)
PNGの最適化は、品質を損なうことなくファイルサイズを削減できる。特にロゴやアイコンなどの画像にとって重要だよ。
JPEGの圧縮レベルによる品質比較
quality
パラメータの変更がファイルサイズと画質にどう影響するか見てみよう。
# 品質の異なるJPEG画像を保存
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)
この例では、同じ画像を品質95、75、50で保存している。品質95の画像はほぼオリジナルと区別がつかないが、ファイルサイズが大きい。品質50は圧縮率が高く、ディテールの損失が目立つかも。
4. WebPフォーマットの利用
WebPフォーマットは、ロスレスおよび有損圧縮と透明性をサポートする現代的なフォーマット。高い圧縮率を誇り、インターネットで広く使われている。
WebPフォーマットへの画像変換
# WebPフォーマットに画像を変換
image.save("example.webp", "WEBP", quality=80)
この例では、品質80で画像をWebPフォーマットに保存している。WebPはJPEGやPNGと比べて、同等の品質でファイルサイズを大幅に削減できる。
最適化された完全な変換例
これまでの方法を全てまとめ、最適化された画像変換用のスクリプトを作ろう。
from PIL import Image
# 画像を開く
image = Image.open("example.jpg")
# PNGに最適化して変換
image.save("converted_optimized.png", "PNG", optimize=True)
# 品質を下げてJPEGに変換
image_rgb = image.convert("RGB") # JPEGに必要なRGBモードに切り替え
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)
# WebPに最適化して変換
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)
この例では:
- 画像を最適化してPNGに変換し、ロスレスでファイルサイズを削減。
- 品質85でJPEGに保存し、高品質と小さなファイルサイズのバランスを実現。
- WebPフォーマットに変換し、インターネット公開に最適化。
GO TO FULL VERSION