非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】背景色と文字が入ったPNG画像を一括生成するプログラム

   

Pythonでは画像処理ライブラリを利用することで、PNG画像を簡単に自動生成できます。今回、Pillowを用いて400×200pxの画像を生成し背景色を切り替えながら連番ファイルを出力するプログラムを作ったので書き留めておきます。また、生成した画像の中央に数値を文字列として描画しました。バナー画像の量産やテスト用素材の作成などに応用できると思います。

プログラムの概要
  • Pillow(PIL)ライブラリを使用してPNG画像を生成
  • 画像サイズは 400 × 200 ピクセルで固定
  • 背景色は赤・黄・青の3種類を用意
  • ファイル名は imgXXa.png ~ imgXXc.png の形式
  • 数値(01~10)を画像中央に文字列として描画
  • 合計30枚の画像を自動生成
ソースコード(コメント付き)


from PIL import Image, ImageDraw, ImageFont

# 生成する画像のサイズ(幅400px × 高さ200px)
WIDTH, HEIGHT = 400, 200

# 背景色の定義
# a: 赤, b: 黄, c: 青
colors = {
“a”: (255, 0, 0),
“b”: (255, 255, 0),
“c”: (0, 0, 255)
}

# フォント設定
# arial.ttf が存在しない場合はデフォルトフォントを使用
try:
font = ImageFont.truetype(“arial.ttf”, 64)
except IOError:
font = ImageFont.load_default()

# 01~10までの画像を生成
for i in range(1, 11):
# 数値を2桁の文字列に変換(01, 02, …)
num_str = f”{i:02d}”

# 背景色ごとに画像を作成
for suffix, bg_color in colors.items():
# 指定した背景色で新しい画像を作成
img = Image.new(“RGB”, (WIDTH, HEIGHT), bg_color)
draw = ImageDraw.Draw(img)

# 描画する文字のサイズを取得
text_bbox = draw.textbbox((0, 0), num_str, font=font)
text_width = text_bbox[2] – text_bbox[0]
text_height = text_bbox[3] – text_bbox[1]

# 文字を画像中央に配置するための座標計算
text_x = (WIDTH – text_width) // 2
text_y = (HEIGHT – text_height) // 2

# 文字を描画(白色)
draw.text(
(text_x, text_y),
num_str,
fill=(255, 255, 255),
font=font
)

# ファイル名を指定してPNG形式で保存
filename = f”img{num_str}{suffix}.png”
img.save(filename)

print(“画像生成が完了しました”)

 

スポンサーリンク

 - Python