2020年5月20日水曜日

開発環境

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、17章(画像の操作)、17.7(演習プロジェクト)、17.7.3(カスタム座席カード)の解答を求めてみる。

コード

#!/usr/bin/env python3
import os
import re
from PIL import Image, ImageDraw, ImageFont

WIDTH, HEIGHT = 360, 288
SIZE = (WIDTH, HEIGHT)
FONT = ImageFont.truetype('/System/Library/Fonts/ヒラギノ明朝 ProN.ttc',
                          size=50,
                          index=0)


dir_name = 'cards'
os.makedirs(dir_name, exist_ok=True)
flower_im = Image.open('flower.png')
reg = re.compile(r'\W')

with open('guests.txt') as f:
    for name in f:
        name = name.strip()
        im = Image.new('RGBA', SIZE, 'white')
        im.paste(flower_im, (0, 0))
        draw = ImageDraw.Draw(im)
        draw.line([(0, 0),
                   (WIDTH - 1, 0),
                   (WIDTH - 1, HEIGHT - 1),
                   (0, HEIGHT - 1),
                   (0, 0)],
                  fill='black')
        text_width, text_height = FONT.getsize(name)
        draw.text(((WIDTH - text_width) / 2, (HEIGHT - text_height) / 2),
                  text=name, font=FONT, fill='black')
        im.save(os.path.join(dir_name, f'{reg.sub("", name)}.png'))

入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))

% cat guests.txt 
Prof. Plum
Miss Scarlet
Col. Mustard
Al Sweigart
Robocop
福沢諭吉
樋口一葉
野口英世
% ./cards.py 
% ls cards    
./   MissScarlet.png  福沢諭吉.png
../   ProfPlum.png  野口英世.png
AlSweigart.png  Robocop.png
ColMustard.png  樋口一葉.png
% open cards/*
%

0 コメント:

コメントを投稿