2024年4月14日日曜日

Pythonによる画像へのキャプション書き込み方法

 How to write captions to images using Python


I am now able to write captions to multiple images at once using Python. The previous Illustrator work has been replaced with Python work, making it super efficient. Even dozens of images can be created in just a few seconds.


多数画像へのキャプション書き込みが、Pythonで一括でできるようになりました。これまでのIllustrator作業がPython作業に置き換わり、超効率化しました。数十枚の画像でも数十秒でできます。

1 Pythonによる画像へのキャプション記入方法

1-1 画像の整理

目的用途に合致した調整、サイズ、解像度の画像を作成します。キャプションとの対応や掲載順番と整合させるため、私は画像名称を連番にします。


用意した画像

1-2 画像別キャプションテキストの作成

画像名称と対応するキャプションをテキストファイルにまとめます。


テキストファイルの例

この例では画像名称を001、002、003…という連番にしています。

1-3 Pythonスクリプトによるキャプション書き込み

下のPythonスクリプトにより多数画像に各キャプションを一括で書き込み、ファイル出力します。数十枚の画像でも数十秒でできます。


キャプション書き込み結果

画像サイズに合わせてキャプションの位置(このスクリプトではキャプション先頭位置)、フォントの大きさを試行錯誤的に事前に試行して確かめておく必要があります。

このPythonスクリプトはChatGPT支援により作成しました。

2 感想

これまで画像のキャプション書き込みはIllustratorを使って作業していました。Illustrator作業でも自動化を追究しましたが、半分は手作業となります。一方Pythonを使うと極端に作業が効率化します。Pythonの簡便性とその威力に驚いています。

3 画像書き込みPythonスクリプト


from PIL import Image, ImageDraw, ImageFont

def add_description_to_image(image_path, description, output_path):
    # 画像を開く
    img = Image.open(image_path)
    
    # 描画オブジェクトを作成
    draw = ImageDraw.Draw(img)
    
    # フォントを読み込む
    font_path = "C:/Windows/Fonts/HGRGE.TTC"
    font_size = 12
    font = ImageFont.truetype(font_path, font_size)
    
    # 描画位置
    position = (50, 350)
    
    # 描画色
    color = "black"
    
    # 説明文字を描画
    draw.text(position, description, fill=color, font=font)
    
    # 画像を保存
    img.save(output_path)

def main():
    # テキストファイルから情報を読み取る
    with open("E:/aaa/テキスト.txt", "r", encoding="utf-8") as file:
        lines = file.readlines()
        for line in lines:
            # 画像名と説明文字を取得
            image_name, description = line.strip().split(",")
            image_path = f"E:/aaa/{image_name}.png"
            output_path = f"E:/aaa/{image_name}e.png"
            
            # 説明文字を画像に追加して保存
            add_description_to_image(image_path, description, output_path)

if __name__ == "__main__":
    main()

0 件のコメント:

コメントを投稿