Closed9

pythonのpillowで画像に外枠をつける

not75743not75743

題材

sourceディレクトリ内のファイルをすべてpillowにより枠線を追加し、
destディレクトリに格納するスクリプト

not75743not75743

使う画像

↑でのせた構成図にしましょう。
Zennの背景は白いので、記事とスクショの境界が少しわかりづらいです。

not75743not75743

サンプルコード

import os
from PIL import Image, ImageOps

def add_border_to_images(source_directory, dest_directory, border, border_color):
    for filename in os.listdir(source_directory):
        if filename.endswith('.png'):

            # "source_directory"内のpngファイルを順に処理する
            source_image_path = os.path.join(source_directory, filename)

            # 画像を開き、枠線を追加
            image = Image.open(source_image_path)
            bordered_image = ImageOps.expand(image, border=border, fill=border_color)

            # 新しいファイル名を作成
            new_filename = f"bordered_{filename}"
            dest_image_path = os.path.join(dest_directory, new_filename)

            # 枠線を追加した画像を保存
            bordered_image.save(dest_image_path)

# 使用例
add_border_to_images('./source', './dest', border=10, border_color='black')
not75743not75743

枠線の色とサイズを変更する

これで目的は達成できましたが、

  • 枠線の色を赤に変えてほしい
  • 枠線が太すぎる

という意見も考えられるため、このようにコードを変更する

app.py
-add_border_to_images('./source', './dest', border=10, border_color='black')
+add_border_to_images('./source', './dest', border=1, border_color='red')
not75743not75743

再確認

枠を補足し、赤色に変更しました!

色、サイズはexpandメソッドのborder,border_colorでそれぞれ変更可能です。

app.py
bordered_image = ImageOps.expand(image, border=border, fill=border_color)
このスクラップは2023/08/06にクローズされました