[Python] tiff画像をリサイズする方法
PythonでTIFF画像をリサイズするには、Pillowライブラリを使用するのが一般的です。
まず、Pillow
をインストールし、Image
モジュールを使ってTIFF画像を開きます。
次に、resize()メソッド
を使用して新しいサイズを指定してリサイズします。
例えば、Image.open('image.tiff')
で画像を開き、image.resize((width, height))
でリサイズできます。
最後に、save()メソッド
でリサイズ後の画像を保存します。
Pillowライブラリのインストールと基本設定
PythonでTIFF画像をリサイズするためには、まずPillowライブラリをインストールする必要があります。
Pillowは、Python Imaging Library(PIL)のフォークであり、画像処理に特化した強力なライブラリです。
以下のコマンドを使用して、Pillowをインストールできます。
pip install Pillow
インストールが完了したら、Pythonスクリプト内でPillowをインポートします。
基本的なインポート文は次の通りです。
from PIL import Image
これで、TIFF画像の読み込みやリサイズなどの操作を行う準備が整いました。
Pillowを使用することで、さまざまな画像フォーマットに対応した柔軟な画像処理が可能になります。
TIFF画像の読み込み
TIFF形式の特徴
TIFF(Tagged Image File Format)は、高品質な画像を保存するためのフォーマットで、特に印刷業界や医療分野で広く使用されています。
TIFF形式の主な特徴は以下の通りです。
特徴 | 説明 |
---|---|
高画質 | 圧縮なしまたは可逆圧縮が可能で、画質が劣化しにくい。 |
マルチページ対応 | 複数の画像を1つのファイルに格納できる。 |
色深度の柔軟性 | 1ビットから32ビットまでの色深度に対応。 |
Image.open()を使ったTIFF画像の読み込み
Pillowライブラリを使用してTIFF画像を読み込むには、Image.open()メソッド
を使用します。
以下は、TIFF画像を読み込むサンプルコードです。
from PIL import Image
# TIFF画像の読み込み
image = Image.open('example.tiff')
このコードを実行すると、指定したTIFF画像がメモリに読み込まれます。
TIFF画像のプロパティ確認方法
読み込んだTIFF画像のプロパティを確認するには、image
オブジェクトの属性を使用します。
以下のようにして、画像のサイズやモードを確認できます。
# 画像のサイズを取得
width, height = image.size
print(f'画像のサイズ: {width}x{height}')
# 画像のモードを取得
mode = image.mode
print(f'画像のモード: {mode}')
出力結果は次のようになります。
画像のサイズ: 800x600
画像のモード: RGB
TIFF画像の表示方法
TIFF画像を表示するには、show()メソッド
を使用します。
以下のコードで、読み込んだ画像を表示できます。
# 画像を表示
image.show()
このコードを実行すると、デフォルトの画像ビューアが開き、TIFF画像が表示されます。
これにより、画像の内容を簡単に確認できます。
TIFF画像のリサイズ方法
resize()メソッドの基本的な使い方
Pillowライブラリでは、resize()メソッド
を使用して画像をリサイズできます。
このメソッドは、新しいサイズを指定することで、画像の幅と高さを変更します。
以下は、基本的な使い方のサンプルコードです。
from PIL import Image
# TIFF画像の読み込み
image = Image.open('example.tiff')
# 画像をリサイズ(幅400px、高さ300px)
resized_image = image.resize((400, 300))
このコードを実行すると、指定したサイズにリサイズされた新しい画像オブジェクトが作成されます。
リサイズ時のアスペクト比を維持する方法
アスペクト比を維持しながらリサイズするには、元の画像の比率を計算し、新しいサイズを設定する必要があります。
以下は、アスペクト比を維持してリサイズするサンプルコードです。
# 元の画像のサイズを取得
original_width, original_height = image.size
# 新しい幅を指定
new_width = 400
# アスペクト比を維持して新しい高さを計算
new_height = int((new_width / original_width) * original_height)
# 画像をリサイズ
resized_image = image.resize((new_width, new_height))
このコードでは、新しい幅を400pxに設定し、元の画像のアスペクト比を維持したまま新しい高さを計算しています。
リサイズ後の画像を保存する方法
リサイズした画像を保存するには、save()メソッド
を使用します。
以下は、リサイズ後の画像をTIFF形式で保存するサンプルコードです。
# リサイズ後の画像を保存
resized_image.save('resized_example.tiff')
このコードを実行すると、リサイズされた画像が指定したファイル名で保存されます。
リサイズ時の補間方法(NEAREST, BILINEAR, BICUBIC, LANCZOS)
リサイズ時の補間方法を指定することで、画像の品質を調整できます。
Pillowでは、以下の補間方法が利用可能です。
補間方法 | 説明 |
---|---|
NEAREST | 最も近いピクセルの色を使用する。処理が速いが、画質は劣る。 |
BILINEAR | 4つのピクセルの平均を取る。滑らかな結果が得られる。 |
BICUBIC | 16個のピクセルを考慮し、より滑らかな結果を得る。 |
LANCZOS | 高品質なリサイズに適したフィルタ。特に縮小時に効果的。 |
リサイズ時に補間方法を指定するには、resize()メソッド
の第二引数に補間方法を渡します。
以下は、BICUBIC補間を使用したリサイズの例です。
# BICUBIC補間を使用してリサイズ
resized_image = image.resize((400, 300), Image.BICUBIC)
このように、補間方法を選択することで、リサイズ後の画像の品質を向上させることができます。
リサイズ時の注意点
画質の劣化を防ぐためのポイント
リサイズを行う際、画質の劣化を防ぐためにはいくつかのポイントに注意する必要があります。
以下の点を考慮することで、より高品質な画像を得ることができます。
- 補間方法の選択: 高品質な補間方法(例:BICUBICやLANCZOS)を選ぶことで、リサイズ後の画質を向上させることができます。
- 元の画像の解像度: 元の画像の解像度が高いほど、リサイズ後の画質が保たれやすくなります。
低解像度の画像を大きくすると、ぼやけた印象になります。
- リサイズの回数を減らす: 画像を何度もリサイズすることは避け、必要なサイズに一度でリサイズすることが重要です。
TIFF画像のマルチページ対応
TIFF形式はマルチページに対応しているため、複数の画像を1つのファイルに格納できます。
Pillowを使用してマルチページTIFF画像をリサイズする場合、各ページを個別に処理する必要があります。
以下は、マルチページTIFF画像の各ページをリサイズするサンプルコードです。
from PIL import Image
# マルチページTIFF画像の読み込み
with Image.open('multi_page_example.tiff') as img:
for i in range(img.n_frames):
img.seek(i) # ページを指定
resized_image = img.resize((400, 300))
resized_image.save(f'resized_page_{i}.tiff')
このコードでは、各ページをリサイズし、個別のファイルとして保存しています。
メモリ使用量の最適化
大きな画像を扱う場合、メモリ使用量が問題になることがあります。
以下の方法でメモリ使用量を最適化できます。
- 画像を必要なサイズで読み込む: 画像をリサイズする前に、必要なサイズで読み込むことでメモリの使用量を削減できます。
Image.thumbnail()
メソッドの利用:thumbnail()
メソッドを使用すると、元のアスペクト比を維持しながら、指定した最大サイズに収まるように画像をリサイズできます。
この方法は、メモリの使用量を抑えるのに役立ちます。
# サムネイルを作成
image.thumbnail((400, 300))
リサイズ後のファイルサイズの確認
リサイズ後の画像のファイルサイズを確認することも重要です。
リサイズによってファイルサイズが大きくなる場合、無駄なストレージを消費することになります。
以下のコードで、リサイズ後のファイルサイズを確認できます。
import os
# リサイズ後の画像を保存
resized_image.save('resized_example.tiff')
# ファイルサイズを確認
file_size = os.path.getsize('resized_example.tiff')
print(f'リサイズ後のファイルサイズ: {file_size} bytes')
このコードを実行すると、リサイズ後の画像のファイルサイズが表示されます。
ファイルサイズを確認することで、ストレージの管理や最適化に役立てることができます。
応用例:複数のTIFF画像を一括リサイズ
複数ファイルの読み込みとリサイズ
複数のTIFF画像を一括でリサイズするには、Pythonのos
モジュールを使用してファイルを読み込み、Pillow
ライブラリでリサイズを行います。
以下は、複数のTIFFファイルを読み込み、リサイズするサンプルコードです。
from PIL import Image
import os
# リサイズする画像のサイズ
new_size = (400, 300)
# 複数のTIFF画像をリサイズ
file_list = ['image1.tiff', 'image2.tiff', 'image3.tiff']
for file_name in file_list:
with Image.open(file_name) as img:
resized_image = img.resize(new_size)
resized_image.save(f'resized_{file_name}')
このコードでは、指定したファイルリスト内の各TIFF画像をリサイズし、リサイズ後の画像を新しいファイル名で保存しています。
フォルダ内の全TIFF画像を一括処理する方法
特定のフォルダ内にある全てのTIFF画像を一括でリサイズするには、os.listdir()
を使用してフォルダ内のファイルを取得し、TIFFファイルのみを処理します。
以下はそのサンプルコードです。
from PIL import Image
import os
# リサイズする画像のサイズ
new_size = (400, 300)
# フォルダ内の全TIFF画像をリサイズ
input_folder = 'input_images'
output_folder = 'output_images'
# 出力フォルダが存在しない場合は作成
os.makedirs(output_folder, exist_ok=True)
for file_name in os.listdir(input_folder):
if file_name.endswith('.tiff'):
with Image.open(os.path.join(input_folder, file_name)) as img:
resized_image = img.resize(new_size)
resized_image.save(os.path.join(output_folder, f'resized_{file_name}'))
このコードでは、指定した入力フォルダ内の全てのTIFF画像をリサイズし、出力フォルダに保存します。
リサイズ後のファイル名の自動変更
リサイズ後のファイル名を自動的に変更するには、元のファイル名に接頭辞や接尾辞を追加することができます。
以下は、リサイズ後のファイル名に接頭辞を追加する例です。
# リサイズ後のファイル名に接頭辞を追加
for file_name in os.listdir(input_folder):
if file_name.endswith('.tiff'):
with Image.open(os.path.join(input_folder, file_name)) as img:
resized_image = img.resize(new_size)
new_file_name = f'resized_{file_name}' # 接頭辞を追加
resized_image.save(os.path.join(output_folder, new_file_name))
このコードでは、リサイズ後のファイル名に resized_
という接頭辞を追加しています。
リサイズ後の画像を別フォルダに保存する方法
リサイズ後の画像を別のフォルダに保存するには、出力フォルダのパスを指定して保存します。
上記のコード例でも、output_folder
を指定してリサイズ後の画像を保存しています。
以下は、別フォルダに保存する際の注意点です。
- 出力フォルダの存在確認: 出力フォルダが存在しない場合は、
os.makedirs()
を使用して作成します。 - ファイルパスの結合:
os.path.join()
を使用して、ファイルパスを正しく結合します。
これにより、リサイズ後の画像を整理されたフォルダに保存することができ、管理が容易になります。
応用例:TIFF画像の一部をトリミングしてリサイズ
crop()メソッドを使ったトリミング
Pillowライブラリのcrop()メソッド
を使用すると、画像の特定の部分をトリミングすることができます。
crop()メソッド
には、トリミングしたい領域の座標を指定します。
座標は、左上の角と右下の角の位置を指定するタプルで表現します。
以下は、TIFF画像をトリミングするサンプルコードです。
from PIL import Image
# TIFF画像の読み込み
image = Image.open('example.tiff')
# トリミングする領域の指定 (左, 上, 右, 下)
crop_area = (100, 100, 400, 400)
# 画像をトリミング
cropped_image = image.crop(crop_area)
このコードでは、指定した座標に基づいて画像の一部をトリミングしています。
トリミング後にリサイズする方法
トリミングした後に画像をリサイズするには、crop()メソッド
で得られた画像オブジェクトに対してresize()メソッド
を使用します。
以下は、トリミング後にリサイズするサンプルコードです。
# トリミング後の画像をリサイズ
new_size = (200, 200)
resized_image = cropped_image.resize(new_size)
# リサイズ後の画像を保存
resized_image.save('cropped_resized_example.tiff')
このコードでは、トリミングした画像を200×200ピクセルにリサイズし、保存しています。
トリミングとリサイズの順序による違い
トリミングとリサイズの順序は、最終的な画像の品質やサイズに影響を与えます。
以下の点に注意が必要です。
- トリミング後にリサイズ: トリミングを先に行うことで、必要な部分だけを残し、その後リサイズするため、画質を保ちながらサイズを小さくできます。
特に、元の画像が大きい場合、トリミング後の画像は小さくなるため、リサイズ時の画質劣化を抑えることができます。
- リサイズ後にトリミング: 先にリサイズを行うと、元の画像の解像度が低下し、トリミング後の画像がぼやける可能性があります。
特に、リサイズによって画像が小さくなる場合、重要なディテールが失われることがあります。
このため、一般的にはトリミングを先に行い、その後リサイズする方法が推奨されます。
これにより、必要な部分を強調しつつ、最終的な画像の品質を向上させることができます。
応用例:TIFF画像のリサイズとフォーマット変換
リサイズ後にJPEGやPNG形式に変換する方法
TIFF画像をリサイズした後、JPEGやPNG形式に変換することができます。
Pillowライブラリでは、save()メソッド
を使用して異なるフォーマットで画像を保存できます。
以下は、TIFF画像をリサイズし、JPEG形式に変換するサンプルコードです。
from PIL import Image
# TIFF画像の読み込み
image = Image.open('example.tiff')
# 画像をリサイズ
resized_image = image.resize((400, 300))
# リサイズ後の画像をJPEG形式で保存
resized_image.save('resized_example.jpg', format='JPEG')
このコードでは、TIFF画像を400×300ピクセルにリサイズし、JPEG形式で保存しています。
同様に、PNG形式に変換する場合は、ファイル名の拡張子を.png
に変更するだけです。
# リサイズ後の画像をPNG形式で保存
resized_image.save('resized_example.png', format='PNG')
変換時の画質設定
JPEG形式に変換する際には、画質を設定することができます。
save()メソッド
のquality
引数を使用して、画質を指定します。
画質は1から100の範囲で設定でき、100が最高品質です。
以下は、JPEG形式で保存する際の画質設定の例です。
# リサイズ後の画像をJPEG形式で保存(画質80)
resized_image.save('resized_example_quality80.jpg', format='JPEG', quality=80)
このコードでは、画質を80に設定してJPEG形式で保存しています。
画質を下げることでファイルサイズを小さくすることができますが、画質が劣化する可能性があるため、適切な値を選ぶことが重要です。
変換後のファイルサイズの最適化
画像フォーマットを変換する際、ファイルサイズを最適化することも重要です。
以下の方法でファイルサイズを削減できます。
- JPEG形式の画質設定: 前述の通り、JPEG形式では画質を調整することでファイルサイズを小さくできます。
画質を下げることで、ファイルサイズを大幅に削減できる場合があります。
- PNG形式の圧縮: PNG形式では、
optimize
引数を使用して圧縮を行うことができます。
以下は、PNG形式で保存する際の圧縮の例です。
# リサイズ後の画像をPNG形式で保存(圧縮)
resized_image.save('resized_example_optimized.png', format='PNG', optimize=True)
- 不要なメタデータの削除: 画像には、撮影情報やカメラ設定などのメタデータが含まれることがあります。
これらの情報を削除することで、ファイルサイズを小さくすることができます。
Pillowでは、メタデータを削除して保存するオプションはありませんが、必要に応じて別のツールを使用してメタデータを削除することができます。
これらの方法を組み合わせることで、リサイズ後の画像のファイルサイズを最適化し、ストレージの効率を向上させることができます。
まとめ
この記事では、PythonのPillowライブラリを使用してTIFF画像をリサイズする方法について詳しく解説しました。
リサイズの基本的な手法から、複数のTIFF画像を一括で処理する方法、さらにはトリミングやフォーマット変換に関する応用例まで幅広く取り上げています。
これらの技術を活用することで、画像処理の効率を向上させ、さまざまなニーズに応じた画像管理が可能になります。
ぜひ、実際にコードを試してみて、画像処理のスキルを向上させてください。