🖼️
PythonのPillowで画像に外枠をつける
はじめに
今回はpythonのPillowで画像に外枠をつけてみました。
外枠をつければZennの添付画像がさらに見やすくなるため、ぜひともマスターしたいところです。
方針
PillowのImageOpsモジュールを使います。
expandメソッドで画像に枠線を追加することが出来るため、今回の用途にドンピシャです。
イメージ図

環境
Ubuntu 20.04
Python 3.11.1
検証
使用する画像
検証中に書いたスクラップのスクショに枠をつけてみましょう。
外枠がどこかわかりづらいですね。

コード実行
コードはこんな感じです。
app.py
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')
ポイントは
- sourceディレクトリの画像ファイルを加工し、destディレクトリに格納する
- pngファイルのみを対象とする。(
if filename.endswith('.png'):) -
ImageOps.expandでどのような枠線を追加するか設定する - Pillowの基本的な流れは以下。
- Image.open()関数を使用して画像ファイルを開く
- 各種のメソッドや関数を使ってImageオブジェクトを編集する
- Image.save()関数で編集後の画像を保存する
- このチュートリアルがわかりやすいです。
- https://pillow.readthedocs.io/en/stable/handbook/tutorial.html
です。
python app.pyを実行したらdestディレクトリの画像を見てみましょう。
動作確認
このような画像が出来上がります。
枠ができててわかりやすいです。

枠線の太さと色を変える
枠線の補足、色を赤に変えてみます。
このようにコードを変更すればOKです。
app.py
-add_border_to_images('./source', './dest', border=10, border_color='black')
+add_border_to_images('./source', './dest', border=1, border_color='red')
とするとこのような画像ができあがります。
完璧ですね。

おわりに
画像をわかりやすくできてよかったです。
ですがCLIだと万人向けではないですね、次回はwebアプリにしたいと思います。
参考
Discussion