ChatGPTで生成した魅力的な画像に、さらに個性を加えたいと思ったことはありませんか?この記事では、Pythonを使って画像にテロップを追加する方法を初心者にもわかりやすく解説します。手順に従えば、誰でも簡単に画像にスプレッドシートに入力したテロップを追加できるようになります。
・ChatGPTで生成した画像にどうやってテキストを追加すればいいかわからない。
・プログラミング初心者でも簡単に画像編集を行いたい。
・オリジナルの画像をSNSやブログで目立たせたい。
こんな疑問に答えます。
- PythonとPillowライブラリを使った簡単な画像編集方法を理解できる。
- ChatGPTで生成した画像にオリジナリティを加える方法を学ぶ。
- SNSやブログで注目を集める魅力的な画像を作成できる。
動画でこのプログラムを実行した様子を載せていますので、興味がありましたらご覧ください。
第1章: ChatGPTとは
1.1 ChatGPTの概要
ChatGPTは、OpenAIによって開発された先進的な自然言語処理AIです。このAIは、ユーザーからのテキスト入力に基づいて、対話形式で応答する能力を持っています。
- 技術的背景: ChatGPTは、大量のテキストデータに基づいて学習しており、一般的な知識や特定のテーマに関する情報を提供できます。
- 多様な応用: 文章作成、質問応答、簡単なコーディング、さらには画像生成など、多岐にわたる用途に使われています。
1.2 ChatGPTの画像生成機能
ChatGPTは、テキストから画像を生成する機能も備えています。ユーザーが提供するテキストの説明に基づいて、関連する画像を作成することができます。
- クリエイティブな用途: カスタムイラスト、ブログやSNSの投稿用画像、教材など、クリエイティブなコンテンツ作成に利用可能です。
- 個性的な表現: ユーザー独自の説明やスタイル指定に基づくため、オリジナルで個性的な画像を生成できます。
1.3 ChatGPTを使った画像の応用例
ChatGPTで生成された画像は、デジタルマーケティング、教育、アートなど、さまざまな分野で利用されています。
- デジタルマーケティング: ソーシャルメディアの投稿、ウェブサイトのビジュアルコンテンツなどに活用できます。
- 教育資料: 学習教材やプレゼンテーションのビジュアルとして使うことで、情報の伝達を効果的に行えます。
1.4 ユーザーにとってのメリット
ChatGPTを画像生成に用いることで、専門的なデザインスキルがなくても、高品質で魅力的なビジュアルコンテンツを手
軽に作成することができます。
- 時間とコストの節約: 専門的なデザインソフトウェアやデザイナーを雇うことなく、素早くクオリティの高い画像を作成できます。
- 独自性と創造性: ユーザー自身のアイデアやスタイルを反映させた、独特の画像を生成することが可能です。
- 多様な応用可能性: プロモーション、教育、エンターテインメントなど、さまざまな分野での使用が可能です。
第2章: 必要なツールと準備
この章では、ChatGPTで生成した画像にテロップを追加するために必要なツールと準備について詳細に説明します。
2.1 Pythonの基本
Pythonは、世界中のプログラマーに広く使われているプログラミング言語です。初心者にも理解しやすい構文と豊富なライブラリが特徴で、画像処理など様々な分野で活用されています。
- 簡潔な構文: Pythonの構文は読みやすく、初学者にも親しみやすいです。
- 豊富なライブラリ: 画像処理に特化したライブラリが多数あり、複雑な処理も比較的簡単に実装できます。
2.2 必要なライブラリ
このプロジェクトで主に使用するのはPillow
とOpenCV
の2つのライブラリです。Pillow
は画像の操作や処理に、OpenCV
は画像の読み込みや保存に適しています。
- Pillow: Python Imaging Library (PIL) のフォークで、画像の作成、変更、処理が可能です。
- OpenCV: コンピュータビジョンのためのライブラリで、画像の読み込みや変換、保存などが行えます。
2.3 環境設定
Pythonと必要なライブラリをインストールする必要があります。Pythonは公式ウェブサイトからダウンロードでき、ライブラリはpipを使って簡単にインストールできます。
- Pythonのインストール: 公式サイトから最新版のPythonをダウンロードしてインストールします。
- ライブラリのインストール: コマンドプロンプトやターミナルで
pip install pillow opencv-python
を実行します。
2.4 Googleスプレッドシートの設定
テロップとして追加するテキストを管理するためにGoogleスプレッドシートを使用します。APIを通じてスプレッドシートからデータを取得するための設定が必要です。
- APIの有効化: Google Cloud ConsoleでGoogle Sheets APIを有効にし、必要な認証情報(JSONファイル)を取得します。
- **スプレッドシートの準備**: 使用するスプレッドシートを作成し、テロップとして追加したいテキストを列に入力します。APIを介してPythonプログラムからアクセス可能にします。
スプレッドシートの設定については、過去に別のブログで紹介しているのでこちらのブログを見てください。
2.5 フォントと画像の準備
画像に追加するテロップの見栄えを良くするために、適切なフォントを選びます。また、処理対象となる画像を準備します。
- フォントの選択: テロップに使用するフォントを選び、そのフォントファイル(通常は.ttf形式)をシステムにインストールまたは指定のパスに配置します。
- 画像の収集: ChatGPTで生成した画像やその他の画像を、プログラムで指定する入力フォルダに配置します。
2.6 開発環境のセットアップ
Pythonプログラムを書くための開発環境を整えます。テキストエディタやIDE(統合開発環境)を選び、Pythonプログラムを書きやすい環境を作ります。
- テキストエディタの選択: Visual Studio Code、PyCharmなどのPythonに適したエディタを利用します。
- プロジェクトフォルダの作成: プログラムファイル、画像ファイル、認証情報を保存するためのプロジェクトフォルダを作成します。
ここまでの準備を整えれば、Pythonを使って画像にテロップを追加する準備が整います。次の章では、実際に画像にテロップを追加するプログラムの作成方法について詳しく説明します。
第3章:プログラムの詳細な説明
この章では、ChatGPTで生成した画像にテロップを追加するためのPythonプログラムをステップバイステップで解説します。コードの各部分について、初心者でも理解できるように丁寧に説明します。
プログラム全文がこちらになります。
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import os
import glob
# import pandas as pd
import gspread
from google.oauth2.service_account import Credentials
# Googleスプレッドシートの設定
SERVICE_ACCOUNT_FILE = 'Your JSON PATH.json' # 認証情報のJSONファイルのパス
SPREADSHEET_ID = 'Your Spread sheet ID'
SHEET_NAME = 'シート1' # シート名
# 画像フォルダと出力フォルダのパスを設定
input_folder = './input/'
output_folder = './output/'
# フォントの設定
font_path = '使いたいフォントのPAT Your FONT PATH'
font_size = 60
# Googleスプレッドシートからテロップデータを取得する
def get_captions_from_spreadsheet():
# サービスアカウントを使用して認証する
credentials = Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE,
scopes=['https://www.googleapis.com/auth/spreadsheets']
)
# クライアントを初期化する
client = gspread.authorize(credentials)
# スプレッドシートを開く
sheet = client.open_by_key(SPREADSHEET_ID).worksheet(SHEET_NAME)
# B列のデータを全て取得する(テロップ)
captions = sheet.col_values(2)
return captions
# 出力フォルダを作成(存在しない場合)
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# スプレッドシートからテロップを取得
captions = get_captions_from_spreadsheet()
# フォルダ内の画像ファイル名を取得
image_files = sorted(os.listdir(input_folder))
# 各画像にテロップを追加する
for idx, image_file in enumerate(image_files, start=1):
if idx < len(captions):
caption = captions[idx] # スプレッドシートの同じ行にあるテロップを取得
# 画像を読み込む
image_path = os.path.join(input_folder, image_file)
image = cv2.imread(image_path)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# Pillow用の画像に変換
pil_image = Image.fromarray(image_rgb)
# フォントを設定
font = ImageFont.truetype(font_path, font_size)
# テキストを追加する
draw = ImageDraw.Draw(pil_image)
x = pil_image.width // 2
y = pil_image.height - 450
draw.text((x, y), caption, font=font, fill=(255, 255, 255), anchor='mm')
# OpenCV形式に画像を戻す
result_image = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
# 画像を保存
output_path = os.path.join(output_folder, f'captioned_{image_file}')
cv2.imwrite(output_path, result_image)
print("画像のテロップ追加処理が完了しました。")
また、スプレッドシートのB列に記載したテロップを準備します。
3.1 はじめに: ライブラリのインポート
プログラムの最初に、必要なライブラリをインポートします。
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import os
import gspread
from google.oauth2.service_account import Credentials
cv2
: OpenCV、画像を読み込んだり操作したりするために使用します。numpy
: 画像データを配列として扱うために使用します。PIL
: Pillow、画像にテキストを追加するために使用します。os
: ファイルパスやディレクトリ操作に使用します。gspread
とCredentials
: Googleスプレッドシートからデータを読み込むために使用します。
3.2 Googleスプレッドシートの設定
Googleスプレッドシートからテロップとして追加するテキストを取得するための設定を行います。
SERVICE_ACCOUNT_FILE = 'path_to_your_json_file.json'
SPREADSHEET_ID = 'your_spreadsheet_id'
SHEET_NAME = 'シート1'
SERVICE_ACCOUNT_FILE
: Google APIの認証情報を含むJSONファイルのパス。SPREADSHEET_ID
: データを取得するスプレッドシートのID。SHEET_NAME
: 使用するシートの名前。- ※上記については自分の環境に合わせて、設定してください。JSONファイルはGoogle consoleから取得できます。
スプレッドシートとの連携方法は別の動画でも紹介しているのでご覧ください。
3.3 テロップデータの取得
スプレッドシートからテロップデータを取得する関数を定義します。
def get_captions_from_spreadsheet():
# 省略
return captions
get_captions_from_spreadsheet
: スプレッドシートからテキストデータを取得し、リストとして返します。
3.4 画像処理の準備
画像とテキストを準備し、フォント設定を行います。
font_path = 'path_to_your_font_file.ttf'
font_size = 60
input_folder = './img/'
output_folder = './output/'
captions = get_captions_from_spreadsheet()
image_files = os.listdir(input_folder)
- font_pathとfont_size: 使用するフォントのパスとサイズを設定します。
- input_folderとoutput_folder: 画像の入力と出力先のフォルダパスを設定します。
- captions: スプレッドシートから取得したテロップデータ。
- image_files: 入力フォルダ内の画像ファイル名のリスト。
3.5 各画像にテロップを追加する処理
フォルダ内の各画像に対してテロップを追加する処理を行います。
for idx, image_file in enumerate(image_files, start=1):
if idx < len(captions):
caption = captions[idx]
# 以下、画像処理
- forループを使用して、画像ファイルのリストを順に処理します。
- caption: 当該画像に追加するテキスト(テロップ)。
3.6 画像処理の詳細
画像にテキストを追加する具体的なステップを説明します。
mage_path = os.path.join(input_folder, image_file)
image = cv2.imread(image_path)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
pil_image = Image.fromarray(image_rgb)
font = ImageFont.truetype(font_path, font_size)
draw = ImageDraw.Draw(pil_image)
x = pil_image.width // 2
y = pil_image.height - 450
draw.text((x, y), caption, font=font, fill=(255, 255, 255), anchor='mm')
result_image = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
output_path = os.path.join(output_folder, f'captioned_{image_file}')
cv2.imwrite(output_path, result_image)
cv2.imread
: 画像ファイルを読み込みます。cv2.cvtColor
: 画像の色空間を変換します(BGRからRGBへ)。Image.fromarray
: NumPy配列からPillow画像オブジェクトを生成します。ImageFont.truetype
: テキストのフォントとサイズを設定します。ImageDraw.Draw
: 画像に描画するためのオブジェクトを生成します。draw.text
: 指定した位置にテキストを描画します。cv2.cvtColor
: 処理後の画像をOpenCVの形式に戻します。cv2.imwrite
: 処理後の画像をファイルに保存します。
3.7 完了メッセージ
すべての画像処理が完了したら、ユーザーに通知するためのメッセージを表示します。
print("画像のテロップ追加処理が完了しました。")
このメッセージは、プログラムが全ての画像ファイルに対してテロップ追加の処理を終えたことを示します。
3.8 プログラムのポイント解説
このプログラムでは、以下のポイントが重要です。
- スプレッドシート連携: Googleスプレッドシートからテロップとして使用するテキストを動的に取得することで、プログラムの柔軟性と再利用性を高めています。
- PillowとOpenCVの併用: Pillowで画像にテキストを追加し、OpenCVで画像の読み込みと保存を行うことで、両ライブラリの長所を活かしています。
- 中央配置のテキスト:
draw.text
関数でテキストを画像の中央に配置することで、視覚的なバランスを保っています。
3.9 プログラムのカスタマイズ
このプログラムは、必要に応じてカスタマイズすることが可能です。たとえば、テキストの色、フォント、サイズを変更したり、テキストの位置を画像上で変更したりできます。
このプログラムを通じて、Pythonの基本的な画像処理技術や、外部データソース(Googleスプレッドシート)との連携方法を理解することができます。さらに、これらのスキルを応用して、より複雑な画像処理プロジェクトに挑戦することも可能です。
第4章: 実際に画像にテロップを追加してみよう
この章では、前章で説明したプログラムを実際に使用して、ChatGPTで生成した画像にテロップを追加する具体的な手順を詳しく説明します。
4.1 画像の選択と準備
まず、テロップを追加したいChatGPTで生成した画像を選びます。選んだ画像をinput_folder
に指定されたフォルダに配置します。
- 画像の選択: テロップを追加したい画像を選びます。画像は明瞭で、テキストを追加するスペースがあるものが望ましいです。
- 画像の配置: 選んだ画像をPythonプログラムがアクセスできるように、指定の入力フォルダに移動またはコピーします。
inputフォルダに画像を下記のように保存します。複数枚入れて問題ありません。
4.2 テロップの準備
Googleスプレッドシートに追加するテロップを準備します。各画像に対応するテロップを事前に入力しておきます。
- スプレッドシートの編集: テロップとして表示したいテキストを、Googleスプレッドシートに入力します。
- データの整理: 各画像に対応するように、テキストをスプレッドシートの適切な行に配置します。
下記のようにスプレッドシートを準備しておきます。
4.3 プログラムの実行
準備した画像とテキストを使用して、プログラムを実行します。プログラムは自動的に各画像にテロップを追加し、出力フォルダに保存します。
- 実行コマンド: Python環境が整っているコマンドプロンプトまたはターミナルで、プログラムファイルを実行します。
- プロセスの確認: プログラムが実行されると、各ステップの進行状況がコンソールに表示されます。
4.4 結果の確認と評価
プログラムが完了した後、出力フォルダに保存された画像を確認します。各画像にテロップが正しく、望み通りに追加されているかを確認しましょう。
- 画像の確認: 出力フォルダに保存された画像を一つ一つ開き、テロップのテキスト、位置、サイズが適切かどうかを確認します。
- 調整の必要性: テキストの位置やサイズが適切でない場合は、プログラムの対応する部分を調整して再実行します。
outputフォルダに下記のようにテロップが入力されていれば成功です。
4.5 応用と展望
このプロセスをマスターすると、さらなる応用が可能になります。異なるフォントや色を使用してみたり、テロップの位置や形式を変更してみたりすることで、より多様なスタイルの画像を作成できます。
- スタイルの多様化: 異なるフォントや色を試して、画像の印象を変えてみましょう。
- 応用プロジェクト: SNS投稿、ブログ記事、プレゼンテーション資料など、実際のプロジェクトに応用してみましょう。
4.6 実践的なヒント
実際にプロジェクトを行う際に役立つヒントをいくつか紹介します。
- 画像の質を保つ: 高解像度の画像を使用し、画像のクオリティが落ちないように注意しましょう。
- 読みやすいテキスト: 背景に溶け込まないように、テキストの色やサイズを適切に選びましょう。
- テキストの簡潔さ: テロップは短く簡潔にし、メッセージが一目で伝わるようにしましょう。
このプロジェクトを通じて、Pythonでの画像処理の基本的なスキルを身につけることができ、将来的により複雑な画像処理タスクにも対応できるようになります。また、クリエイティブな表現の幅も広がり、あなたのデジタルコンテンツをより魅力的にすることができるでしょう。