CodeGym /コース /Python SELF JA /描いてみる:テキスト、線、水印

描いてみる:テキスト、線、水印

Python SELF JA
レベル 46 , レッスン 0
使用可能

1. 画像にテキストを追加する

Pillowで画像にテキストを追加するには、ImageDrawモジュールを使用するよ。このモジュールのtext()メソッドを使って、指定した座標にテキストを表示する。

テキストをシンプルに追加

                
from PIL import ImageDraw, ImageFont

# 描画オブジェクトを作成
draw = ImageDraw.Draw(image)

# 画像にテキストを追加
text = "テキスト例"
draw.text((50, 50), text, fill="white")

# テキスト付き画像を保存
image.save("text_example.jpg")
                
            

この例では、テキスト"テキスト例"が座標(50, 50)に追加されるよ。fillパラメータはテキストの色を設定する。それは文字列(例えば"white""black")やRGB形式(例えば(255, 255, 255))で指定できる。

フォントのカスタマイズ

デフォルトではPillowは基本フォントを使う。他のフォントとフォントサイズを指定するにはImageFont.truetype()を使う。システム上でフォントファイルがアクセス可能か確認してね。

                
# フォントを読み込み
font = ImageFont.truetype("arial.ttf", 36)

# カスタムフォントでテキストを追加
draw.text((50, 100), text, font=font, fill="yellow")
image.save("text_custom_font_example.jpg")
                
            

ここでは、フォントarial.ttfをサイズ36ピクセルで使用しているよ。必要なフォントがシステムにない場合は、それをダウンロードしてファイルのパスを指定しよう。

2. ウォーターマークを追加する

ウォーターマークは、画像にコピー防止のために半透明のテキストや画像を重ねることだよ。例えばロゴや作者情報を追加するときに使える。Pillowを使えば、簡単なテキストウォーターマークを作成できる。

テキストウォーターマーク

                
# 描画オブジェクトを作成
draw = ImageDraw.Draw(image)

# ウォーターマーク用テキストとフォント
watermark_text = "© 2023 My Company"
font = ImageFont.truetype("arial.ttf", 24)

# ウォーターマークの位置を決定
width, height = image.size
text_width, text_height = draw.textsize(watermark_text, font=font)
x = width - text_width - 10
y = height - text_height - 10

# 右下隅にウォーターマークを追加
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128))
image.save("watermarked_example.jpg")
                
            

この例では、ウォーターマークが画像の右下隅に追加されるよ。xyは画像の端から少し内側にオフセットして計算している。

3. グラフィック要素の追加

テキストだけでなく、Pillowを使えば線、四角形、円、楕円などの基本的なグラフィック要素も描画できるよ。例えば枠線やエリアの強調や幾何学的形状を作ることができる。

線を描く

線を描くにはline()メソッドを使うよ。このメソッドは線の開始と終了の座標を受け取る。

                
# 左上から右下へ線を描く
draw.line((0, 0, width, height), fill="red", width=5)
image.save("line_example.jpg")
                
            

このコードは、画像の左上隅から右下隅まで赤い線を描画する。

四角形を描く

四角形はrectangle()メソッドを使って描画できるよ。このメソッドには左上と右下の角の座標を渡す。

                
# 四角形を描画する
draw.rectangle((50, 50, 200, 200), outline="blue", width=3)
image.save("rectangle_example.jpg")
                
            

ここでは、青い枠線で幅3ピクセルの四角形を描画しているよ。fillパラメータを使えば、四角形を色で塗りつぶすこともできる。

円と楕円を描く

円や楕円を描くにはellipse()メソッドを使うよ。円を描くには、幅と高さに同じ値を指定するといい。

                
# 円を描く
draw.ellipse((150, 150, 250, 250), outline="green", width=4)
image.save("circle_example.jpg")
                
            

この例では、中心が(200, 200)の円を描画しているよ。幅と高さを異なる値にすると楕円になる。

多角形を描く

多角形を描くにはpolygon()メソッドを使う。このメソッドは図形の頂点の座標を受け取るよ。

                
# 三角形を描く
draw.polygon([(100, 100), (150, 50), (200, 100)], outline="purple", fill="orange")
image.save("polygon_example.jpg")
                
            

このコードはオレンジの塗りつぶしと紫の枠線を持つ三角形を描画するよ。頂点の座標を渡せば、どんな形状でも作れるよ。

4. サンプル

テキストとグラフィックを組み合わせた例

ここまでのすべてを統合して、テキスト、ウォーターマーク、グラフィック要素を含む画像を作成しよう。

                
from PIL import Image, ImageDraw, ImageFont

# 画像を読み込む
image = Image.open("example.jpg")
draw = ImageDraw.Draw(image)

# テキストを追加
font = ImageFont.truetype("arial.ttf", 36)
draw.text((50, 50), "デモテキスト", font=font, fill="yellow")

# 右下隅にウォーターマークを追加
watermark_text = "© 2023 My Company"
font_watermark = ImageFont.truetype("arial.ttf", 24)
width, height = image.size
text_width, text_height = draw.textsize(watermark_text, font=font_watermark)
x = width - text_width - 10
y = height - text_height - 10
draw.text((x, y), watermark_text, font=font_watermark, fill=(255, 255, 255, 128))

# 線、四角形、円を描画
draw.line((0, 0, width, height), fill="red", width=5)
draw.rectangle((50, 50, 200, 200), outline="blue", width=3)
draw.ellipse((150, 150, 250, 250), outline="green", width=4)

# 結果を保存
image.save("final_composition_example.jpg")
                
            

この例は、テキスト、ウォーターマーク、いくつかのグラフィック要素(線、四角形、円)を含む画像を作成する。プレゼンテーションやブログ、プロフェッショナルなイメージ作成などに使えるよ。

実践的な応用

  • 画像のマーキングと保護: ウォーターマークは画像の無断使用を防ぎ、テキストは作者や会社の情報を追加するのに役立つ。
  • ソーシャルメディア用画像準備: テキストやグラフィックを追加することで、公開用の画像に情報を付加できる。
  • インフォグラフィックやデータ視覚化: 線や図形などのグラフィック要素を使用することで、シンプルなグラフやチャートを作成できるので、Pillowはインフォグラフィックを作るのに便利だよ。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION