1. インストール手順
このプログラムを実行するためには、Pythonの環境といくつかのライブラリが必要です。以下の手順に従ってインストールを行ってください。
- Pythonのインストール
Pythonがインストールされていない場合は、公式サイトからダウンロードしてインストールしてください。
Python公式サイト - 必要なライブラリのインストール
ターミナルを開き、以下のコマンドを実行してライブラリをインストールします。
pip install Pillow pillow-heif
2. プログラムの説明
次に、各プログラムごとの説明を行います。
ライブラリのインポート
import os
from PIL import Image, UnidentifiedImageError
from pillow_heif import register_heif_opener
- os: ファイル操作を行うための標準ライブラリ。
- PIL.Image: 画像操作を行うためのライブラリPillowのモジュール。
- Pillow.heif.register_heif_opener: HEIF形式の画像を扱うためのモジュール。
HEICオープナーを登録
register_heif_opener()
- HEIC形式の画像を開くための設定を行います。
メインの変換関数
def convert_images(folder_path, target_format='PNG'):
# フォルダ内のすべてのファイルを取得
files = os.listdir(folder_path)
for file in files:
# ファイルの拡張子を取得
file_name, file_extension = os.path.splitext(file)
file_extension = file_extension.lower()
# 画像ファイルのみを処理
if file_extension in ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.heic', '.heif']:
# 画像を開く
img_path = os.path.join(folder_path, file)
try:
with Image.open(img_path) as img:
# 新しいファイル名を作成(拡張子のみ変更)
new_filename = file_name + '.' + target_format.lower()
new_path = os.path.join(folder_path, new_filename)
# RGB形式に変換(PNGの場合は透過性を保持)
if img.mode in ('RGBA', 'LA') and target_format.upper() == 'PNG':
# PNGの場合、透過性を保持
img.save(new_path, target_format.upper())
else:
# JPEGの場合、RGBに変換
img = img.convert('RGB')
img.save(new_path, target_format.upper())
# 元のファイルを削除(同じファイルでない場合のみ)
if img_path.lower() != new_path.lower():
os.remove(img_path)
print(f'Converted and replaced: {file} -> {new_filename}')
except UnidentifiedImageError:
print(f"Error: Cannot identify image file '{file}'. Skipping this file.")
except Exception as e:
print(f"Error processing '{file}': {str(e)}")
- convert_images: 画像を指定のフォーマットに変換するメイン関数。
- os.listdir: 指定したフォルダ内のファイル一覧を取得。
- os.path.splitext: ファイル名と拡張子を分離。
- Image.open: 画像ファイルを開く。
- img.convert: 画像をRGB形式に変換。
- img.save: 画像を保存。
- os.remove: 元のファイルを削除。
メイン処理
if __name__ == "__main__":
folder_path = input("変換したい画像があるフォルダのパスを入力してください: ")
target_format = input("変換後のフォーマットを入力してください (PNG または JPG): ").upper()
if target_format not in ['PNG', 'JPG']:
print("無効なフォーマットです。PNG または JPG を指定してください。")
else:
convert_images(folder_path, target_format)
- input: ユーザーからフォルダパスと変換フォーマットを入力。
- if name == “main”: スクリプトが直接実行された場合のみメイン処理を実行。
3. 全体のプログラム
以下に、全体のプログラムを示します。
import os
from PIL import Image, UnidentifiedImageError
from pillow_heif import register_heif_opener
# HEICオープナーを登録
register_heif_opener()
def convert_images(folder_path, target_format='PNG'):
# フォルダ内のすべてのファイルを取得
files = os.listdir(folder_path)
for file in files:
# ファイルの拡張子を取得
file_name, file_extension = os.path.splitext(file)
file_extension = file_extension.lower()
# 画像ファイルのみを処理
if file_extension in ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.heic', '.heif']:
# 画像を開く
img_path = os.path.join(folder_path, file)
try:
with Image.open(img_path) as img:
# 新しいファイル名を作成(拡張子のみ変更)
new_filename = file_name + '.' + target_format.lower()
new_path = os.path.join(folder_path, new_filename)
# RGB形式に変換(PNGの場合は透過性を保持)
if img.mode in ('RGBA', 'LA') and target_format.upper() == 'PNG':
# PNGの場合、透過性を保持
img.save(new_path, target_format.upper())
else:
# JPEGの場合、RGBに変換
img = img.convert('RGB')
img.save(new_path, target_format.upper())
# 元のファイルを削除(同じファイルでない場合のみ)
if img_path.lower() != new_path.lower():
os.remove(img_path)
print(f'Converted and replaced: {file} -> {new_filename}')
except UnidentifiedImageError:
print(f"Error: Cannot identify image file '{file}'. Skipping this file.")
except Exception as e:
print(f"Error processing '{file}': {str(e)}")
if __name__ == "__main__":
folder_path = input("変換したい画像があるフォルダのパスを入力してください: ")
target_format = input("変換後のフォーマットを入力してください (PNG または JPG): ").upper()
if target_format not in ['PNG', 'JPG']:
print("無効なフォーマットです。PNG または JPG を指定してください。")
else:
convert_images(folder_path, target_format)
4. 活用事例
このプログラムは、例えば以下のような状況で活用できます。
- HEIC形式の写真をJPEGやPNGに変換:iPhoneで撮影したHEIC形式の写真をWindowsやウェブで使いやすいJPEGやPNG形式に変換。
- 大量の画像を一括変換:多くの画像ファイルを一度に変換し、ファイル管理を簡素化。
- 画像のフォーマット統一:プロジェクトで使用する画像のフォーマットを統一する際に役立ちます。
このプログラムを利用することで、画像のフォーマット変換が効率的に行えます。