Hello World.
LiSMOtechの久津間です。
今回の記事では、PythonとPillowを使い文字列付きの画像を作成していきます。
AIで画像生成ができるご時世ですが、プログラムを利用してSNSのサムネイルやバナーなどを効率良く作成できたら便利ですよね。
その他にも何かのリストデータを基に大量の画像データを作成する時に活用できると思います!
また、今回の記事ではPillowのインストールなどには触れません。
Pillowのインストールがお済みでない方は、前回の記事を確認してください。
先ずは画像サイズや表示するテキスト、フォントの設定などを準備します。
私はMACを利用しているので「/System/Library/Fonts/」の指定となりますが、こちらは環境に応じて変更してください。
width, height = 320, 320 # 画画像サイズ
text = 'NEXTGATE LiSMOtech株式会社' # 表示させる文字列
font_path = '/System/Library/Fonts/A-OTF-RyuminPro-Ultra.otf'
font_size = 18 # 文字サイズ
font_color = (255,255,255) # 文字の色
先ずはImage.new()で画像のインスタンスを生成します。
RGB指定、高さ・幅、カラーコードを引数として設定しています。
img = Image.new("RGB", (width, height), (51,65,73)) # 画像データを作成
フォントを設定するため、ImageFont.truetype()で指定することが可能です。
ここではフォントパス、フォントサイズを指定します。
font = ImageFont.truetype(font_path, font_size) # フォント
画像に文字列を描画するため、ImageDraw.text()を使います。
ImageDraw.Draw()でImageDrawインスタンスを生成し、text()メソッドを呼ぶことで、画像に文字列を描画可能です。
また、ImageDraw.text()では、文字列の位置、テキスト情報、フォントカラー、フォント情報、揃えを指定します。
draw = ImageDraw.Draw(img)
draw.text((x, y), text, font_color, font=font, align='center')
ここまで出来たらImage.show()で画像を表示させてみます。
img.show() # 画像の表示
文字列の位置を中央にするため、ImageDraw.textbbox()を使いテキストのバウンディングボックスを取得します。
これにより左上x座標、 左上y座標、 右下x座標、 右下y座標を取得可能です。
x, y, x2, y2=draw.textbbox((width/2, height/2), text, font=font, anchor='md')
全体のコードはこちらになります。
from PIL import Image,ImageDraw,ImageFont
width, height = 640,640 # 画画像サイズ
text = 'NEXTGATE LiSMOtech株式会社' # 表示させる文字列
font_path = '/System/Library/Fonts/A-OTF-RyuminPro-Ultra.otf'
font_size = 24 # 文字サイズ
font_color = (255,255,255) # 文字の色
img = Image.new("RGB", (width, height), (51,65,73)) # 画像データを作成
font = ImageFont.truetype(font_path, font_size) # フォント
draw = ImageDraw.Draw(img)
x, y, x2, y2=draw.textbbox((width / 2, height / 2), text, font=font, anchor='md')
draw.text((x, y), text, font_color, font=font, align='center')
img.show() # 画像の表示
今回の記事ではPythonのPillowで文字列付きの画像を作成しました。
他にも様々な指定や処理、テキストが複数行のケースなどあるかと思いますが、ドキュメントを読んで是非試してみてください!
NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。
企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。
平日10:00〜19:00
© NEXTGATE LiSMOtech All rights reserved