🖼️

PythonのPillowで画像に外枠をつける

2023/08/06に公開

はじめに

今回はpythonのPillowで画像に外枠をつけてみました。
外枠をつければZennの添付画像がさらに見やすくなるため、ぜひともマスターしたいところです。

方針

PillowのImageOpsモジュールを使います。
expandメソッドで画像に枠線を追加することが出来るため、今回の用途にドンピシャです。

https://pillow.readthedocs.io/en/stable/reference/ImageOps.html#PIL.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()関数で編集後の画像を保存する

です。
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アプリにしたいと思います。

参考

https://pillow.readthedocs.io/en/stable/index.html
https://hibiki-press.tech/python/pillow-imagedraw/2531

Discussion