Pythonは多くの画像処理ライブラリを提供していますが、その中でもPillowは非常に人気の高いライブラリです。Pillowを使用することで、簡単に画像の読み込み、編集、保存を行うことができ、リサイズや回転、フィルタ適用などの基本的な画像操作を直感的に行えます。本記事では、Pillowライブラリを使った基本的な画像処理の方法について紹介します。

Pillowライブラリとは?

Pillowは、Pythonの画像処理ライブラリであるPILPython Imaging Library)の後継プロジェクトです。Pillowを使うと、画像の操作が簡単になり、特に画像ファイルの読み込み、保存、加工がスムーズに行えます。例えば、次のような操作が可能です。

  • 画像の読み込みと保存
  • 画像のリサイズやトリミング
  • 画像の回転や反転
  • フィルタやエフェクトの適用 Pillowは多くの画像フォーマット(JPEG、PNG、GIF、BMPなど)をサポートしています。

Pillowのインストール

Pillowを使うためには、まずライブラリをインストールする必要があります。以下のコマンドでインストールできます。

pip install pillow

インストールが完了したら、さっそく基本的な画像操作を行ってみましょう。

画像の読み込みと保存

Pillowを使って画像を読み込むのは非常に簡単です。Image.open()メソッドを使って画像を開き、編集した後にsave()メソッドで保存することができます。

from PIL import Image
# 画像を読み込む
image = Image.open("example.jpg")
# 画像の情報を表示
print(image.format, image.size, image.mode)
# 画像を保存する
image.save("output.png")

このコードでは、JPEG形式の画像を読み込み、PNG形式で保存しています。また、画像のフォーマット、サイズ、色のモードも確認できます。

画像のリサイズ

画像のサイズを変更することは、多くの画像処理タスクでよく行われる操作です。resize()メソッドを使えば、簡単に画像をリサイズできます。

# 画像のリサイズ
resized_image = image.resize((800, 600))
resized_image.save("resized_output.png")

上記のコードでは、画像のサイズを800x600ピクセルに変更し、新しい画像として保存しています。元の画像のアスペクト比を保持したい場合は、次のように比率を計算することもできます。

# 元のアスペクト比を保ってリサイズ
new_width = 800
ratio = new_width / image.width
new_height = int(image.height * ratio)
resized_image = image.resize((new_width, new_height))
resized_image.save("resized_aspect_output.png")

画像の回転

rotate()メソッドを使用すると、画像を指定した角度で回転させることができます。

# 画像を90度回転
rotated_image = image.rotate(90)
rotated_image.save("rotated_output.png")

また、角度をマイナスにすると反時計回りに回転します。

画像のトリミング(切り抜き)

画像の特定の部分を切り抜くには、crop()メソッドを使用します。このメソッドでは、トリミングする領域を指定します。

# 左上から右下にかけての領域をトリミング
cropped_image = image.crop((100, 100, 400, 400))
cropped_image.save("cropped_output.png")

crop()メソッドの引数には、(左, 上, 右, 下)の座標をタプルで指定します。これにより、指定した範囲を切り抜いた新しい画像を生成できます。

画像のフィルタ適用

Pillowでは、画像にフィルタを適用することも簡単です。たとえば、画像をぼかすにはfilter()メソッドを使い、ImageFilterモジュールのフィルタを指定します。

from PIL import ImageFilter
# 画像をぼかす
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.save("blurred_output.png")

他にもさまざまなフィルタが用意されています。

  • ImageFilter.CONTOUR:輪郭を抽出
  • ImageFilter.DETAIL:ディテールを強調
  • ImageFilter.SHARPEN:画像をシャープに
# 画像にシャープフィルタを適用
sharpened_image = image.filter(ImageFilter.SHARPEN)
sharpened_image.save("sharpened_output.png")

画像の変換(カラー/グレースケール)

画像をグレースケールや他のカラーモードに変換するには、convert()メソッドを使用します。

# 画像をグレースケールに変換
grayscale_image = image.convert("L")
grayscale_image.save("grayscale_output.png")

"L"はグレースケールを表し、他にも"RGB""RGBA"などのモードに変換することができます。

複数画像の結合

Pillowを使って複数の画像を結合することも可能です。たとえば、横に画像を並べて結合するには、new()メソッドで新しい画像を作成し、paste()メソッドで画像を貼り付けます。

# 2つの画像を横に結合する
image1 = Image.open("image1.jpg")
image2 = Image.open("image2.jpg")
# 新しい空の画像を作成(横に並べるための幅を計算)
combined_width = image1.width + image2.width
combined_image = Image.new("RGB", (combined_width, image1.height))
# 画像を貼り付ける
combined_image.paste(image1, (0, 0))
combined_image.paste(image2, (image1.width, 0))
# 保存
combined_image.save("combined_output.jpg")

まとめ

PythonPillowライブラリを使えば、シンプルな画像処理を簡単に行うことができます。本記事では、画像の読み込みから保存、リサイズ、回転、フィルタ適用、複数画像の結合など、基本的な画像操作を紹介しました。Pillowの基本的な機能を活用して、画像編集や加工を効率的に進められるようになるでしょう。