[Python] jpgファイルを読み込んでトリミングする方法
Pythonでjpgファイルを読み込み、トリミングするには、Pillowライブラリを使用します。
まず、PIL.Image
モジュールを使って画像を読み込みます。
次に、Image.crop()メソッド
を使用してトリミングを行います。
このメソッドは、トリミングする領域を指定するために、左上と右下の座標をタプルで受け取ります。
最後に、トリミングした画像を保存または表示することができます。
Pillowライブラリのインストールと基本設定
Pillowとは?
Pillowは、Pythonで画像処理を行うためのライブラリです。
画像の読み込み、表示、保存、トリミング、リサイズ、フィルタリングなど、さまざまな画像操作を簡単に行うことができます。
Pillowは、Python Imaging Library (PIL) のフォークであり、より多くの機能とサポートが追加されています。
Pillowのインストール方法
Pillowは、Pythonのパッケージ管理ツールであるpipを使用して簡単にインストールできます。
以下のコマンドをターミナルまたはコマンドプロンプトで実行してください。
pip install Pillow
必要なモジュールのインポート
Pillowを使用するためには、まず必要なモジュールをインポートする必要があります。
以下のコードを使用して、PillowのImageモジュールをインポートします。
from PIL import Image
画像ファイルの読み込み方法
画像ファイルを読み込むには、Image.open()メソッド
を使用します。
このメソッドに画像ファイルのパスを渡すことで、画像を開くことができます。
以下は、画像ファイルを読み込むサンプルコードです。
from PIL import Image
# 画像ファイルを読み込む
image = Image.open("sample.jpg")
# 画像の情報を表示する
print("画像のサイズ:", image.size)
print("画像のフォーマット:", image.format)
画像のサイズ: (幅, 高さ)
画像のフォーマット: JPEG
このコードでは、sample.jpg
という画像ファイルを読み込み、そのサイズとフォーマットを表示しています。
画像ファイルのパスは、実際のファイルの場所に応じて変更してください。
jpgファイルの読み込み
jpgファイルを開く方法
jpgファイルを開くには、先ほどインポートしたPillowのImage
モジュールを使用します。
Image.open()メソッド
を使って、指定したパスのjpgファイルを開くことができます。
以下は、jpgファイルを開くサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
このコードでは、example.jpg
という名前のjpgファイルを開いています。
ファイル名は、実際のファイルに合わせて変更してください。
画像の基本情報を取得する方法
画像を開いた後、画像の基本情報を取得することができます。
具体的には、画像のサイズ、フォーマット、モードなどを取得できます。
以下のサンプルコードでは、これらの情報を表示します。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# 画像の基本情報を取得
width, height = image.size
format = image.format
mode = image.mode
# 画像の情報を表示
print("画像のサイズ:", width, "x", height)
print("画像のフォーマット:", format)
print("画像のモード:", mode)
画像のサイズ: 幅 x 高さ
画像のフォーマット: JPEG
画像のモード: RGB
このコードでは、画像の幅と高さ、フォーマット、モードを取得し、表示しています。
モードは、画像の色空間を示します。
画像の表示方法
Pillowを使用して画像を表示するには、Image.show()メソッド
を使用します。
このメソッドを呼び出すことで、デフォルトの画像ビューアで画像を表示できます。
以下は、画像を表示するサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# 画像を表示する
image.show()
このコードを実行すると、指定したjpgファイルがデフォルトの画像ビューアで表示されます。
表示された画像は、ユーザーが確認できるようになります。
画像のトリミング方法
Image.crop()メソッドの使い方
画像をトリミングするには、PillowのImage.crop()メソッド
を使用します。
このメソッドは、トリミングしたい範囲を指定することで、指定した部分の画像を切り出します。
以下は、Image.crop()メソッド
を使用したサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# 画像をトリミングする
cropped_image = image.crop((左, 上, 右, 下))
ここで、(左, 上, 右, 下)
はトリミング範囲の座標を指定します。
これにより、指定した範囲の画像が切り出されます。
トリミング範囲の指定方法
トリミング範囲は、画像の左上隅と右下隅の座標で指定します。
座標は、画像の幅と高さに基づいて決定します。
例えば、画像の左上隅から(100, 100)の位置から、右下隅が(400, 400)の位置までトリミングする場合、以下のように指定します。
# トリミング範囲を指定
cropped_image = image.crop((100, 100, 400, 400))
このコードでは、(100, 100)から(400, 400)の範囲をトリミングしています。
トリミング後の画像の保存方法
トリミングした画像を保存するには、Image.save()メソッド
を使用します。
このメソッドに保存先のファイル名を指定することで、トリミング後の画像を保存できます。
以下は、トリミング後の画像を保存するサンプルコードです。
# トリミング後の画像を保存
cropped_image.save("cropped_example.jpg")
このコードでは、トリミングした画像をcropped_example.jpg
という名前で保存しています。
ファイル名は、必要に応じて変更してください。
トリミング後の画像の表示方法
トリミング後の画像を表示するには、再度Image.show()メソッド
を使用します。
以下は、トリミング後の画像を表示するサンプルコードです。
# トリミング後の画像を表示
cropped_image.show()
このコードを実行すると、トリミングした画像がデフォルトの画像ビューアで表示されます。
これにより、トリミング結果を確認することができます。
トリミングの応用例
中央部分をトリミングする方法
画像の中央部分をトリミングするには、画像のサイズを取得し、その中心を基準にトリミング範囲を計算します。
以下は、中央部分をトリミングするサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# 画像のサイズを取得
width, height = image.size
# トリミング範囲を計算(中央部分を切り出す)
left = width // 4
top = height // 4
right = left + (width // 2)
bottom = top + (height // 2)
# 中央部分をトリミング
cropped_image = image.crop((left, top, right, bottom))
# トリミング後の画像を表示
cropped_image.show()
このコードでは、画像の中央部分をトリミングしています。
トリミング範囲は、画像の幅と高さを基に計算されています。
画像の四隅をトリミングする方法
画像の四隅をトリミングするには、各隅の座標を指定してトリミングを行います。
以下は、画像の四隅をトリミングするサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# 左上隅をトリミング
top_left = image.crop((0, 0, width // 2, height // 2))
top_left.show()
# 右上隅をトリミング
top_right = image.crop((width // 2, 0, width, height // 2))
top_right.show()
# 左下隅をトリミング
bottom_left = image.crop((0, height // 2, width // 2, height))
bottom_left.show()
# 右下隅をトリミング
bottom_right = image.crop((width // 2, height // 2, width, height))
bottom_right.show()
このコードでは、画像の四隅をそれぞれトリミングし、表示しています。
任意の比率でトリミングする方法
任意の比率でトリミングするには、トリミング範囲を計算する際に比率を考慮します。
以下は、1:1の比率でトリミングするサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# 画像のサイズを取得
width, height = image.size
# トリミング範囲を計算(1:1の比率)
new_size = min(width, height) // 2 # 新しいサイズを決定
left = (width - new_size) // 2
top = (height - new_size) // 2
right = left + new_size
bottom = top + new_size
# 任意の比率でトリミング
cropped_image = image.crop((left, top, right, bottom))
# トリミング後の画像を表示
cropped_image.show()
このコードでは、画像の中央から1:1の比率でトリミングしています。
複数の画像を一括でトリミングする方法
複数の画像を一括でトリミングするには、ループを使用して各画像に対してトリミング処理を行います。
以下は、指定したフォルダ内の全てのjpgファイルを一括でトリミングするサンプルコードです。
import os
from PIL import Image
# 画像が保存されているフォルダのパス
folder_path = "images/"
# フォルダ内の全てのjpgファイルを取得
for filename in os.listdir(folder_path):
if filename.endswith(".jpg"):
# jpgファイルを開く
image = Image.open(os.path.join(folder_path, filename))
# トリミング範囲を指定(例:中央部分をトリミング)
width, height = image.size
left = width // 4
top = height // 4
right = left + (width // 2)
bottom = top + (height // 2)
# トリミング
cropped_image = image.crop((left, top, right, bottom))
# トリミング後の画像を保存
cropped_image.save(os.path.join(folder_path, "cropped_" + filename))
このコードでは、指定したフォルダ内の全てのjpgファイルを読み込み、中央部分をトリミングして新しいファイル名で保存しています。
エラーハンドリング
ファイルが存在しない場合の対処法
画像ファイルを開く際に、指定したファイルが存在しない場合はFileNotFoundError
が発生します。
このエラーを適切に処理するためには、try
とexcept
を使用してエラーハンドリングを行います。
以下は、ファイルが存在しない場合の対処法を示すサンプルコードです。
from PIL import Image
# jpgファイルを開く
file_path = "non_existent_file.jpg"
try:
image = Image.open(file_path)
except FileNotFoundError:
print(f"エラー: '{file_path}' が見つかりません。ファイル名を確認してください。")
このコードでは、指定したファイルが存在しない場合にエラーメッセージを表示します。
無効な画像フォーマットの場合の対処法
無効な画像フォーマットのファイルを開こうとすると、OSError
が発生します。
このエラーもtry
とexcept
を使用して処理できます。
以下は、無効な画像フォーマットの場合の対処法を示すサンプルコードです。
from PIL import Image
# 無効な画像ファイルを開く
file_path = "invalid_image.txt"
try:
image = Image.open(file_path)
except OSError:
print(f"エラー: '{file_path}' は無効な画像フォーマットです。")
このコードでは、無効な画像フォーマットのファイルを開こうとした際にエラーメッセージを表示します。
トリミング範囲が画像サイズを超える場合の対処法
トリミング範囲が画像のサイズを超える場合、ValueError
が発生します。
このエラーを防ぐためには、トリミング範囲が画像のサイズ内に収まるようにチェックする必要があります。
以下は、トリミング範囲が画像サイズを超える場合の対処法を示すサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# 画像のサイズを取得
width, height = image.size
# トリミング範囲を指定
left, top, right, bottom = 100, 100, 500, 500
# トリミング範囲が画像サイズを超えないか確認
if right > width or bottom > height:
print("エラー: トリミング範囲が画像サイズを超えています。")
else:
cropped_image = image.crop((left, top, right, bottom))
cropped_image.show()
このコードでは、トリミング範囲が画像のサイズを超えているかどうかを確認し、超えている場合にはエラーメッセージを表示します。
これにより、プログラムが予期しないエラーで停止するのを防ぎます。
応用:トリミング後の画像処理
トリミング後にリサイズする方法
トリミングした画像をリサイズするには、Image.resize()メソッド
を使用します。
このメソッドに新しいサイズを指定することで、画像のサイズを変更できます。
以下は、トリミング後にリサイズするサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# トリミング範囲を指定
cropped_image = image.crop((100, 100, 400, 400))
# リサイズする新しいサイズを指定
new_size = (200, 200) # 幅200px、高さ200pxにリサイズ
# トリミング後の画像をリサイズ
resized_image = cropped_image.resize(new_size)
# リサイズ後の画像を表示
resized_image.show()
このコードでは、トリミングした画像を200×200ピクセルにリサイズしています。
トリミング後に回転させる方法
トリミングした画像を回転させるには、Image.rotate()メソッド
を使用します。
このメソッドに回転角度を指定することで、画像を回転させることができます。
以下は、トリミング後に回転させるサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# トリミング範囲を指定
cropped_image = image.crop((100, 100, 400, 400))
# 画像を回転させる(例:90度回転)
rotated_image = cropped_image.rotate(90)
# 回転後の画像を表示
rotated_image.show()
このコードでは、トリミングした画像を90度回転させています。
トリミング後にフィルターを適用する方法
Pillowでは、さまざまなフィルターを使用して画像に効果を加えることができます。
ImageFilter
モジュールを使用してフィルターを適用します。
以下は、トリミング後にぼかしフィルターを適用するサンプルコードです。
from PIL import Image, ImageFilter
# jpgファイルを開く
image = Image.open("example.jpg")
# トリミング範囲を指定
cropped_image = image.crop((100, 100, 400, 400))
# ぼかしフィルターを適用
blurred_image = cropped_image.filter(ImageFilter.BLUR)
# フィルター適用後の画像を表示
blurred_image.show()
このコードでは、トリミングした画像にぼかしフィルターを適用しています。
トリミング後に別のフォーマットで保存する方法
トリミングした画像を別のフォーマットで保存するには、Image.save()メソッド
を使用し、保存するファイル名に新しいフォーマットの拡張子を指定します。
以下は、トリミング後の画像をPNGフォーマットで保存するサンプルコードです。
from PIL import Image
# jpgファイルを開く
image = Image.open("example.jpg")
# トリミング範囲を指定
cropped_image = image.crop((100, 100, 400, 400))
# トリミング後の画像をPNGフォーマットで保存
cropped_image.save("cropped_image.png", format="PNG")
このコードでは、トリミングした画像をcropped_image.png
という名前でPNGフォーマットで保存しています。
ファイル名やフォーマットは必要に応じて変更してください。
まとめ
この記事では、PythonのPillowライブラリを使用してjpgファイルを読み込み、トリミングする方法について詳しく解説しました。
トリミングの基本的な手法から応用例、エラーハンドリング、トリミング後の画像処理まで幅広く取り上げました。
これを機に、実際にPillowを使って画像処理を行い、さまざまな画像編集のスキルを身につけてみてください。