0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python コードで画像に枠線をつける方法【Pillow】

Last updated at Posted at 2023-09-07

記事やドキュメントに貼り付けるスクリーンショット画像に枠線(ボーダー)をつけるためのコードを作ってみました。
コピペでも動きますので、よろしければ使ってみてください。

環境

今回の開発環境は下記のとおりです。

  • PC
    • OS:Windows 11
  • Python
    • Version:3.8.10
    • ライブラリ:pillow, webcolors

コードの紹介

画像に枠線をつけるために画像加工を行える Pillow というライブラリを用いています。
また、枠線の色の指定を 16進数カラーコード で指定を行いたいので、 webcolors というライブラリも用いています。

ライブラリのインストール

ライブラリのインストールはお使いの環境にあわせて行ってください。

pip の場合

pip install pillow
pip install webcolors

poetry の場合

poetry add pillow
poetry add webcolors

Poetry について
Poetry の詳細は、下記の記事を参考にしてください。
https://qiita.com/IoriGunji/items/290db948c11fdc81046a

ソースコード

Python のソースコードは下記のとおりです。

image_liner.py
import os
import re
import glob
from typing import Final, List
from PIL import Image
import webcolors

COLOR: Final[str] = '#000000'
BORDER_SIZE: Final[str] = 1
IMAGE_EXTS: Final[List[str]] = ['png', 'jpg', 'bmp']

def main():
    chdir = os.path.dirname(__file__)
    files = glob.glob(os.path.join(chdir, '*'))
    for file in files:
        for ext in IMAGE_EXTS:
            if re.search(f'\.{ext}$', file):
                image_edit(file, BORDER_SIZE, COLOR)

def image_edit(img_path: str, border: int, color: str):
    img = Image.open(img_path)
    dir, file = os.path.split(img_path)
    output = 'resized'
    os.makedirs(os.path.join(dir, output), exist_ok=True)
    new_img = add_border(img, border, color)
    new_img.save(os.path.join(dir, output, file), quality = 100)

def add_border(pil_img: Image, border: int, color: str):
    return campus_resize(pil_img, border, border, border, border, color)

def campus_resize(pil_img: Image, top: int, right: int, bottom: int, left: int, color: str):
    width, height = pil_img.size
    new_width = width + right + left
    new_height = height + top + bottom
    rgb = webcolors.hex_to_rgb(color)
    new_pil_img = Image.new(pil_img.mode, (new_width, new_height), rgb)
    new_pil_img.paste(pil_img, (left, top))
    return new_pil_img

if __name__ == "__main__":
    main()

使い方

このソースコードの使い方は下記のとおりです。

  1. 必要なライブラリのインストールを行います。
  2. 上記のソースコードをコピペして image_liner.py を作成します。
  3. 加工したい画像を image_liner.py と同じフォルダに保存します。
  4. image_liner.py を実行します。
  5. 変換された画像が ./resized フォルダに出力されます。

サンプル

試しに Qiita のスクリーンショット画像を加工してみます。
元画像には枠線がついていないのですが、加工後の画像には枠線がついているのが確認できます。
※なお、Qiita の場合は CSS で自動的に薄灰色の枠線が付与されます。

Before
Sample_01.png
After
Sample_02.png

設定の変更方法

このソースコードの設定を変える方法について説明します。

枠線の色を変えたい場合

下記の定数の値を変更します。

COLOR: Final[str] = '#000000'

例:枠線の色を コーラル色 に変えたい場合

COLOR: Final[str] = '#ff7f50'

サンプル

Before
Sample_02.png
After
Sample_03.png

枠線の太さを変えたい場合

下記の定数の値を変更します。
値は px になります。

BORDER_SIZE: Final[str] = 1

例:枠線の太さを 3px に変えたい場合

BORDER_SIZE: Final[str] = 3

サンプル

Before
Sample_03.png
After
Sample_04.png

読み込む画像の種類を変えたい場合

下記の定数の値を変更します。

IMAGE_EXTS: Final[List[str]] = ['png', 'jpg', 'bmp']

例:gif を追加したい場合

IMAGE_EXTS: Final[List[str]] = ['png', 'jpg', 'bmp', 'gif']
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?