掲示板<25>2026/1/6
from=TOZ

Pythonを利用②「image_resizer.py」

数ページあるPDFファイルを、各ページの画像ファイル(jpg)に分割して、サイズや名前を一括変更して ホームページの画像表示に利用していました。この作業はMACの手作業でやっていましたが、今回Python でやってみました。
最初に(以下全て端末で。pdftocairoはLinuxMintで稼働) 「pdftocairo -jpeg -r 200 202601news.pdf」 4ページのPDFファイルから4つの画像が自動生成されます。 202601news-1.jpg 202601news-2.jpg 202601news-3.jpg 202601news-4.jpg 次に、<24>の作業中に作成したpyファイルの「image_resizer.py」 の設定を以下のようにして、
import os
from PIL import Image
import glob

def batch_process_images(input_dir, output_dir, target_width, base_name):
    """
    指定したディレクトリ内のJPG画像をリサイズし、指定した名前の後にハイフン付き連番を付けて保存する。
    """
    # 出力ディレクトリがなければ作成
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"フォルダを作成しました: {output_dir}")

    # JPGファイルを取得(大文字小文字の両方に対応)
    files = glob.glob(os.path.join(input_dir, "*.jpg")) + glob.glob(
os.path.join(input_dir, "*.JPG"))
    files.sort() # 名前順にソート

    if not files:
        print("画像ファイルが見つかりませんでした。")
        return

    print(f"{len(files)} 枚の画像を処理します...")

    for i, file_path in enumerate(files, 1):
        try:
            with Image.open(file_path) as img:
                # 元のサイズを取得
                width, height = img.size
                
                # アスペクト比を維持して新しい高さを計算
                aspect_ratio = height / width
                target_height = int(target_width * aspect_ratio)
                
                # リサイズ処理
                resized_img = img.resize((target_width, target_height),
 Image.Resampling.LANCZOS)
                
                # 新しいファイル名を作成(例: BASE_NAME-1.jpg)
                new_file_name = f"{base_name}-{i:01d}.jpg"
                save_path = os.path.join(output_dir, new_file_name)
                
                # 保存
                resized_img.save(save_path, "JPEG", quality=85)
                print(f"保存完了: {new_file_name}")

        except Exception as e:
            print(f"エラー({file_path}): {e}")

    print("\nすべての処理が完了しました。")

if __name__ == "__main__":
    # --- 設定項目 ---
    INPUT_FOLDER = "./images"      # 元画像があるフォルダ
    OUTPUT_FOLDER = "./processed"  # 保存先フォルダ
    TARGET_WIDTH = 1000             # 変更後の幅(ピクセル)
    BASE_FILE_NAME = "202601news"        # 新しいファイル名の基本形
    # ----------------

    batch_process_images(INPUT_FOLDER, OUTPUT_FOLDER, TARGET_WIDTH,
 BASE_FILE_NAME)

「python3 image_resizer.py」を実行すれば完成する。

← 一覧へ戻る