フォルダ内のすべてのJPEG/PNG画像に1ピクセルの黒い枠を追加するためのPythonコード

windows環境用

実行フォルダにあるjpegすべてに1ドットの黒いフチを付けます

# -*- coding: cp932 -*-
from PIL import Image
import os

def add_border_to_images_in_current_folder():
    # カレントディレクトリを取得
    current_folder = os.getcwd()

    # カレントディレクトリ内のすべてのファイルをチェック
    for filename in os.listdir(current_folder):
        # Shift-JISでエンコードされたファイル名を扱う
        filename_shiftjis = filename.encode('cp932').decode('cp932')

        if filename_shiftjis.lower().endswith('.jpg') or filename_shiftjis.lower().endswith('.jpeg'):
            file_path = os.path.join(current_folder, filename_shiftjis)
            
            # 画像を開く
            with Image.open(file_path) as img:
                # 画像のサイズを取得
                width, height = img.size
                
                # 新しい画像サイズ(元のサイズ + 2ピクセル)
                new_width = width + 2
                new_height = height + 2
                
                # 新しい画像を作成(黒い背景)
                new_img = Image.new("RGB", (new_width, new_height), "black")
                
                # 元の画像を中央に配置
                new_img.paste(img, (1, 1))
                
                # 画像を保存(元のファイル名で上書き)
                new_img.save(file_path)

add_border_to_images_in_current_folder()


こちらはPNG用。透明は維持。

# -*- coding: cp932 -*-
from PIL import Image
import os

def add_black_border_to_png_images_in_current_folder():
    # カレントディレクトリを取得
    current_folder = os.getcwd()

    # カレントディレクトリ内のすべてのファイルをチェック
    for filename in os.listdir(current_folder):
        if filename.lower().endswith('.png'):
            file_path = os.path.join(current_folder, filename)
            
            # 画像を開く
            with Image.open(file_path) as img:
                # 画像のサイズを取得
                width, height = img.size
                
                # 新しい画像サイズ(元のサイズ + 2ピクセル)
                new_width = width + 2
                new_height = height + 2
                
                # 新しい画像を作成(黒い背景のRGBA画像)
                new_img = Image.new("RGBA", (new_width, new_height), (0, 0, 0, 255))
                
                # アルファチャンネルを取得(存在する場合)
                if img.mode in ('RGBA', 'LA'):
                    mask = img.split()[-1]
                else:
                    mask = None

                # 元の画像を中央に配置
                new_img.paste(img, (1, 1), mask)
                
                # 画像を保存(元のファイル名で上書き)
                new_img.save(file_path)

add_black_border_to_png_images_in_current_folder()