PythonでYouTubeのサムネイル画像を自動作成

スポンサーリンク

条件
・画像サイズは横1280px ✕ 縦720px
・背景は白、テキストは黒で2行、中央寄せ
・画像形式はjpg

from PIL import Image, ImageDraw, ImageFont

def create_thumbnail(text_line1, text_line2, output_file):
    # 画像サイズ(1280x720)
    width, height = 1280, 720
    background_color = (255, 255, 255)  # 背景色:白

    # 画像の作成
    img = Image.new('RGB', (width, height), background_color)
    draw = ImageDraw.Draw(img)

    # フォントの設定(システムフォントを使用)
    try:
        font = ImageFont.truetype("arial.ttf", 80)  # フォントサイズ80(適宜変更可)
    except IOError:
        font = ImageFont.load_default()

    # テキストの色と位置
    text_color = (0, 0, 0)  # テキスト色:黒

    # 各行のテキストを中央に配置するためにテキストのbounding boxを取得
    text1_bbox = draw.textbbox((0, 0), text_line1, font=font)
    text2_bbox = draw.textbbox((0, 0), text_line2, font=font)

    # テキストの幅と高さを取得
    text1_width, text1_height = text1_bbox[2] - text1_bbox[0], text1_bbox[3] - text1_bbox[1]
    text2_width, text2_height = text2_bbox[2] - text2_bbox[0], text2_bbox[3] - text2_bbox[1]

    # テキストの座標を計算して中央に配置
    text1_position = ((width - text1_width) // 2, height // 3 - text1_height // 2)
    text2_position = ((width - text2_width) // 2, 2 * height // 3 - text2_height // 2)

    # テキストを描画
    draw.text(text1_position, text_line1, fill=text_color, font=font)
    draw.text(text2_position, text_line2, fill=text_color, font=font)

    # 画像をJPEG形式で保存
    img.save(output_file, "JPEG")
    print(f"サムネイルを {output_file} に保存しました!")

# テキストの入力
text_line1 = input("1行目のテキストを入力してください: ")
text_line2 = input("2行目のテキストを入力してください: ")

# サムネイルを生成
create_thumbnail(text_line1, text_line2, "thumbnail.jpg")

しかしこのままだと日本語のテキストが非表示になってしまう。

日本語に対応したプログラムはこちら。

from PIL import Image, ImageDraw, ImageFont

def create_thumbnail(text_line1, text_line2, output_file):
    # 画像サイズ(1280x720)
    width, height = 1280, 720
    background_color = (255, 255, 255)  # 背景色:白

    # 画像の作成
    img = Image.new('RGB', (width, height), background_color)
    draw = ImageDraw.Draw(img)

    # 日本語フォントの設定
    try:
        font = ImageFont.truetype("NotoSansCJK-Regular.ttc", 80)  # フォントファイルとサイズ
    except IOError:
        font = ImageFont.load_default()

    # テキストの色と位置
    text_color = (0, 0, 0)  # テキスト色:黒

    # 各行のテキストを中央に配置するためにテキストのbounding boxを取得
    text1_bbox = draw.textbbox((0, 0), text_line1, font=font)
    text2_bbox = draw.textbbox((0, 0), text_line2, font=font)

    # テキストの幅と高さを取得
    text1_width, text1_height = text1_bbox[2] - text1_bbox[0], text1_bbox[3] - text1_bbox[1]
    text2_width, text2_height = text2_bbox[2] - text2_bbox[0], text2_bbox[3] - text2_bbox[1]

    # テキストの座標を計算して中央に配置
    text1_position = ((width - text1_width) // 2, height // 3 - text1_height // 2)
    text2_position = ((width - text2_width) // 2, 2 * height // 3 - text2_height // 2)

    # テキストを描画
    draw.text(text1_position, text_line1, fill=text_color, font=font)
    draw.text(text2_position, text_line2, fill=text_color, font=font)

    # 画像をJPEG形式で保存
    img.save(output_file, "JPEG")
    print(f"サムネイルを {output_file} に保存しました!")

# テキストの入力
text_line1 = input("1行目のテキストを入力してください: ")
text_line2 = input("2行目のテキストを入力してください: ")

# サムネイルを生成
create_thumbnail(text_line1, text_line2, "thumbnail.jpg")

注意点
・日本語フォントをダウンロードして用意する。
・「NotoSansCJK-Regular.ttc」で検索するとダウンロードできるサイトがある。
・フォントファイルをスクリプトと同じフォルダに配置する。

python
スポンサーリンク

コメント

タイトルとURLをコピーしました