この記事では、PythonのPillowライブラリを使ってCSVファイルからテキストデータを読み込み、PNGファイルを生成する方法を紹介します。
1.はじめに
Pillowライブラリを使用すると、Pythonで画像処理を簡単に実装できます。このライブラリを使用して、CSVファイルからテキストデータを読み込み、PNGファイルを生成する方法を紹介します。
2.コードの紹介
以下のPythonコードは、CSVファイルからテキストデータを読み込み、PNGファイルを生成するサンプルコードです。
from PIL import Image, ImageDraw, ImageFont
import csv
import os
# Specify the CSV file path
csv_file_path = 'Input\input.csv'
# Read the data from the CSV file
with open(csv_file_path, 'r') as csv_file:
csv_reader = csv.reader(csv_file)
data = [row for row in csv_reader]
# Specify the font path and font size
font_path = 'Input\meiryo_0.ttf'
font_size = 12 # Change to the desired font size
# Loop through the data and generate PNG files for each entry
for i, row in enumerate(data):
text = ','.join([s for s in row if s]) # Ignore empty strings
if not text: # Ignore rows with no text
continue
font = ImageFont.truetype(font_path, font_size)
text_width, text_height = font.getsize(text)
num_lines = text.count('\n') + 1 # Count the number of newline characters in the text
#print(f'Text has {num_lines} lines')
image = Image.new('RGB', (text_width+20, text_height*num_lines+20), color=(255, 255, 255))
draw = ImageDraw.Draw(image)
draw.text((10, 10), text, font=font, fill=(0, 0, 0))
output_folder_path = os.path.join(os.path.dirname(csv_file_path), 'PNG Files')
os.makedirs(output_folder_path, exist_ok=True)
output_file_path = os.path.join(output_folder_path, f'{i+1}.png')
image.save(output_file_path)
3.コードの説明
ソースコードの説明は以下の通りです。
<code># Specify the CSV file path
csv_file_path = 'Input\input.csv'
</code>
CSVファイルのパスを指定します。
<code># Read the data from the CSV file
with open(csv_file_path, 'r') as csv_file:
csv_reader = csv.reader(csv_file)
data = [row for row in csv_reader]
</code>
CSVファイルからデータを読み取ります。
<code># Specify the font path and font size
font_path = 'Input\meiryo_0.ttf'
font_size = 12 # Change to the desired font size
</code>
使用するフォントとフォントサイズを指定します。
# Loop through the data and generate PNG files for each entry
for i, row in enumerate(data):
text = ','.join([s for s in row if s]) # Ignore empty strings
if not text: # Ignore rows with no text
continue
font = ImageFont.truetype(font_path, font_size)
text_width, text_height = font.getsize(text)
num_lines = text.count('\n') + 1 # Count the number of newline characters in the text
#print(f'Text has {num_lines} lines')
image = Image.new('RGB', (text_width+20, text_height*num_lines+20), color=(255, 255, 255))
draw = ImageDraw.Draw(image)
draw.text((10, 10), text, font=font, fill=(0, 0, 0))
output_folder_path = os.path.join(os.path.dirname(csv_file_path), 'PNG Files')
os.makedirs(output_folder_path, exist_ok=True)
output_file_path = os.path.join(output_folder_path, f'{i+1}.png')
image.save(output_file_path)
データをループで処理し、各エントリに対してPNGファイルを生成します。まず、行の文字列から空の文字列を除外し、テキストを作成します。次に、指定されたフォントとフォントサイズでフォントオブジェクトを作成し、テキストの幅と高さを取得します。テキストの中の改行文字の数を数え、イメージオブジェクトを作成します。その後、ImageDrawオブジェクトを作成し、テキストを描画します。最後に、PNGファイルの出力フォルダパスを設定し、PNGファイルを保存します。
4.使っているライブラリとバージョンの一覧
本記事で使用しているライブラリとそのバージョンを以下に示します。
- fonttools 4.27.0
- numpy 1.24.2
- pandas 1.5.3
- Pillow 8.3.2
PythonバージョンはPython 3.9.13です。
5.まとめ
PythonのPillowライブラリを使用して、CSVファイルからテキストデータを読み込み、PNGファイルを生成する方法を紹介しました。Pillowライブラリを使用することで、Pythonで画像処理を簡単に実装できます。
コメント