CodeGym /Javaコース /Python SELF JA /フォーマット管理と変換

フォーマット管理と変換

Python SELF JA
レベル 46 , レッスン 2
使用可能

1. 画像フォーマットの判別

対応している画像フォーマット

Pillowは以下のような多くの画像フォーマットをサポートしているよ:

  • JPEG (JPG): 写真用の最も普及しているフォーマットの1つ。品質を犠牲にして圧縮するけど、すごくファイルサイズを減らせる。透明性はサポートしていない。
  • PNG: ロスレスフォーマットで透明性(アルファチャンネル)をサポートしている。ロゴやアイコン、鮮明さが必要な画像に適している。
  • BMP: 圧縮なしで高品質だが、ファイルサイズが大きいフォーマット。透明性をサポートしている。
  • TIFF: ロスレス画像保存によく使われるフォーマット。印刷業界でよく利用される。
  • WEBP: 現代的なフォーマットで、圧縮率が高く、透明性をサポートしている。ウェブ画像に最適で、高品質で小さなファイルサイズを提供する。

変換のための画像読み込み

画像を変換する前に、Image.open()メソッドを使って読み込む必要がある。

Python

from PIL import Image

# 画像を開く
image = Image.open("example.jpg")
print(image.format)  # 元の画像フォーマットを確認する

2. 画像を別のフォーマットに変換する

save()メソッドを使うと、ファイル名の拡張子を変更するか、フォーマットを明示的に指定することでさまざまなフォーマットに保存できる。

JPEGをPNGに変換

JPEGからPNGに変換するには、保存時に新しい拡張子を指定するだけだよ:

Python

# PNGフォーマットで画像を保存
image.save("example_converted.png")

このコードは、JPEGフォーマットの画像をPNGフォーマットに変換し、指定した名前で保存する。PNGはロスレス保存に最適で、透明な領域もサポートしている。

PNGをJPEGに変換

PNGからJPEGへの変換も可能。ただし、JPEGは透明性をサポートしていないので、透明な領域は白で塗りつぶされる点に注意。

Python

# PNGをJPEGに変換(透明性は白背景に置き換えられる)
image = image.convert("RGB")  # JPEGに必要なRGBモードに切り替え
image.save("example_converted.jpg", "JPEG")

convert("RGB")メソッドは、JPEGが透明領域をサポートしていないため、RGBモードに切り替えるために使用される。これがJPEGフォーマットへの保存に必要。

3. 画像の品質管理

Pillowではqualityoptimizeパラメータを使って品質とファイルサイズを制御できる。特にJPEGとPNGに便利だよ。

JPEGの品質と最適化

JPEGを保存する際、qualityパラメータで圧縮率を調整できる。品質値が高いほどファイルサイズが大きく、画質も良くなる。qualityの値は1から95まで設定可能(デフォルトは75)。

Python

# 品質を下げてJPEG画像を保存
image.save("example_compressed.jpg", "JPEG", quality=85)

このコードは品質85で画像を保存する。通常、良好な画質を保ちながらファイルサイズを縮小できる。ミニチュア画像を作る場合はquality = 50などの低品質も指定可能。

PNGの最適化

PNGの場合、optimize = Trueパラメータを指定すると、余分なデータを削除してロスレス圧縮する。これはインターネットで画像を公開する際に特に役立つ。

Python

# 最適化されたPNGを保存
image.save("example_optimized.png", "PNG", optimize=True)

PNGの最適化は、品質を損なうことなくファイルサイズを削減できる。特にロゴやアイコンなどの画像にとって重要だよ。

JPEGの圧縮レベルによる品質比較

qualityパラメータの変更がファイルサイズと画質にどう影響するか見てみよう。

Python

# 品質の異なる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フォーマットへの画像変換

Python

# WebPフォーマットに画像を変換
image.save("example.webp", "WEBP", quality=80)

この例では、品質80で画像をWebPフォーマットに保存している。WebPはJPEGやPNGと比べて、同等の品質でファイルサイズを大幅に削減できる。

最適化された完全な変換例

これまでの方法を全てまとめ、最適化された画像変換用のスクリプトを作ろう。

Python

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フォーマットに変換し、インターネット公開に最適化。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION