1. 画像の読み込みと保存
Pillowで画像を読み込むには、Imageクラスを使用するよ。読み込んだ後、画像を変換したり、さまざまな形式で保存したりできる。基本的な操作を見てみよう。
画像の読み込み
画像を読み込むには、Image.open()メソッドを使う。これを使うと、サポートされている任意の形式の画像を開けるよ。
from PIL import Image
# 画像を開く
image = Image.open("example.jpg")
# ファイル情報をプリントする
print(image.format) # 画像形式(例えばJPEGやPNGなど)
print(image.size) # 画像サイズ(幅、高さ)
print(image.mode) # 色モード(例えばRGBやGrayscaleなど)
このコードでは、example.jpgという画像を読み込んで、形式、サイズ、色モードなどの主要な特徴を出力するよ。画像が同じフォルダにない場合は、ファイルのフルパスを指定してね。
画像の保存
画像を読み込んで変更した後、別の形式で保存することができるよ。保存するファイルの名前に目的の拡張子を指定すれば大丈夫。save()メソッドを使って保存しよう。
# 他の形式で画像を保存
image.save("example.png") # PNG形式で画像を保存
また、JPEG画像のサイズを小さくするために、保存時に品質を変更することもできる。これは特にファイルサイズを縮小したい場合に便利だよ。
# 品質を変更して保存
image.save("compressed_example.jpg", quality=85) # qualityの値は1から95まで
2. 画像のサイズ変更
サイズ変更は、画像処理で最も一般的なタスクの1つだよ。Pillowでは、幅と高さの具体的なパラメータを設定したり、比率に応じてサイズを変更したり、サムネイルを作成したりできる。
resize()メソッドを使ったサイズ変更
resize()メソッドでは、画像の正確なサイズ(幅と高さ)を指定できるけど、新しいサイズが元の比率を保たない場合、画像が歪むことがあるよ。
# 新しいサイズを設定
new_size = (800, 600)
resized_image = image.resize(new_size)
# サイズ変更後の画像を保存
resized_image.save("resized_example.jpg")
この例では、画像を800x600ピクセルのサイズに変更し、新しいファイルとして保存するよ。もし元の画像の比率が異なる場合、その比率を維持するために画像が引き伸ばされたり縮んだりするから気をつけてね。
thumbnail()メソッドを使った比率に基づくサイズ変更
画像の比率を保ちながらサイズを変更したい場合は、thumbnail()メソッドを使おう。このメソッドは、指定されたサイズに収まるように画像を自動的に縮小して、元の比率を維持するよ。サムネイル画像の作成に特に便利!
# 最大サイズ400x400ピクセルのサムネイルを作成
image.thumbnail((400, 400))
# サムネイルを保存
image.save("thumbnail_example.jpg")
thumbnail()メソッドは"インプレース"で画像を変更するよ。つまり、変更は元のimageオブジェクト自体に反映されるってこと。この例では、画像のサイズを400x400ピクセル以内に縮小して、比率を維持するよ。
ImageOps.fit()を使った比率を考慮したトリミング
画像の比率を保ちつつ、指定されたサイズにぴったり合わせる必要がある場合は、ImageOps.fit()メソッドを使おう。このメソッドでは余分な部分をトリミングして、指定されたサイズに合わせられるよ。
from PIL import ImageOps
# 新しいサイズを設定
target_size = (400, 400)
fitted_image = ImageOps.fit(image, target_size, method=Image.LANCZOS)
# トリミングされた画像を保存
fitted_image.save("fitted_example.jpg")
ImageOps.fit()メソッドは、指定されたサイズに収まるように画像を自動的にトリミングするよ。例えば、元の画像が長方形の場合、このメソッドはその両端をトリミングして、正方形にして400x400ピクセルのサイズにするよ。
3. 完全なコード例
以下は、読み込みからサイズ変更、保存まで、これまで見てきた全てのメソッドを統合したコード例だよ。
from PIL import Image, ImageOps
# 画像を開く
image = Image.open("example.jpg")
# 比率を無視してサイズ変更
resized_image = image.resize((800, 600))
resized_image.save("resized_example.jpg")
# 比率を守って画像を縮小
image.thumbnail((400, 400))
image.save("thumbnail_example.jpg")
# 必要なサイズにトリミングして縮小
fitted_image = ImageOps.fit(image, (400, 400), method=Image.LANCZOS)
fitted_image.save("fitted_example.jpg")
サイズ変更メソッドの説明
-
resize(): 任意のサイズを指定できるけど、元の比率を保たない場合、画像が歪む可能性がある。 -
thumbnail(): 元の比率を保ってサイズ変更できる。サムネイルを作るのに便利。 -
ImageOps.fit(): トリミングを行いながら、指定されたサイズに正確に合わせる。歪みなしでサイズ調整したい場合に便利。
4. コツ:
画像サイズ変更の実践的な応用
- ウェブサイト用画像の最適化: 大きな画像はページの読み込みを遅くする可能性があるから、品質を損なわずにサイズを縮小するのが重要だね。
- ギャラリー用のサムネイル作成:
thumbnail()を使えば、プレビューで表示できる画像のサムネイルを簡単に作れるよ。 - 特定のサイズに合わせた画像の調整: アバターやプロフィール写真みたいに、決まったサイズに合わせる必要がある場合、
ImageOps.fit()を使ってトリミングと調整ができるよ。
メソッド選択のアドバイス
幅と高さを正確に指定したい場合は、resize()を使ってね。元の比率が気にならないならこれでOK。
サムネイルを作るか、画像を縮小しつつ元の比率を保ちたい場合は、thumbnail()が便利。
画像を特定のサイズに調整しつつ、比率を保ちたい場合は、ImageOps.fit()を使おう。余分な部分をトリミングして、指定した枠にフィットさせられるよ。
GO TO FULL VERSION