見出し画像

【Python練習-005】Excelファイルの複数行の文字列を画像に変換


先日作った、エクセルファイルを読み込んで1行(4列)分のテキストデータを画像ファイルにするコードを改造してみました。

今回の成果

今回は、複数行にわたるエクセルファイルを読み込んで、各行のデータを取得して、行数分だけのファイルを作ってみます。
目標物はこれでした↓

使用データ(Excel)

使用したデータは、こんな感じ✨

作ったPythonコード

作ったコードは下記のものです。今回もchatGPTに手伝ってもらいました。※特にエラーが出たときはすぐに直してくれて頼もしいです。

from PIL import Image, ImageDraw, ImageFont
import openpyxl

# テキストを画像に変換する関数の定義
def txt_to_img(text_list):

    # text_listをループで処理
    for index, text in enumerate(text_list):

        # RGB, 画像サイズ, 背景色を設定
        im = Image.new("RGB", (1792, 1024), (204, 255, 255))

        draw = ImageDraw.Draw(im)

        # PCローカルのフォントへのパスと、フォントサイズを指定
        font = ImageFont.truetype('C:/Windows/Fonts/HGRPP1.TTC', 85)

        # 描画位置、描画する文字、文字色、フォントを指定
        draw.multiline_text((700, 150), text, fill=(0, 0, 204), font=font)

        # ファイルに出力(ファイル名はindex.png)
        im.save(str(index)+".png")
        print("画像ファイルを生成しました")

    

# Excelファイルの読み込み
wb = openpyxl.load_workbook('txt-img.xlsx')
sheet = wb.active

# text_listを初期化
text_list = []

# A列を検査して、A列がNoneでない場合、各行の文字列を改行コードで連結してtext_listに格納
for row in sheet.iter_rows(min_row=1, min_col=1, max_row=sheet.max_row, values_only=True):
    if row[0] is not None:
        title = '\n'.join(str(cell) for cell in row)
        text_list.append(title)

# text_listを出力
print(text_list)

# Excelファイルを閉じる
wb.close()

# テキストを画像に変換する関数を呼び出す
txt_to_img(text_list)

前回のコードは関数にしました。
text_listの作成や、A列の検査部分も関数に入れて、wbだけ引数として渡しても良かったのかもしれません。
まぁ、なんとかきちんと生成できたので満足としましょう💮
まだよくわからないことが多いので頑張ります。

次の目標

テキストサイズや色、背景の色、文字列の位置なども変数にしてみたいです。
あと、そのうちGUIで動かしてみたいですね。
まだまだ精進して進まねばです。

では💕

この記事が気に入ったらサポートをしてみませんか?