【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で動かしてみたいですね。
まだまだ精進して進まねばです。
では💕
この記事が気に入ったらサポートをしてみませんか?