アイキャッチ画像の漢字が文字化けしていた話 — ImagenからGeminiへの移行

アイキャッチ画像の漢字が文字化けしていた話 — ImagenからGeminiへの移行

ブログに掲載されているアイキャッチ画像を確認したとき、正直「これは大問題だ」と思った。

漢字が文字化けした失敗例

漢字が完全に文字化けしている。

「株式」が「桰弌」になり、「分析」が意味不明な文字列になっていた。絵のタッチは可愛いのに、テキストが全滅している。


なぜ文字化けするのか

このシステムはアイキャッチ画像の生成に Google Imagenimagen-4.0-generate-001)を使っていた。Imagenは画像生成に特化したモデルだが、日本語テキストの描画に対応していない。文字を「それっぽい形」に近似しようとするが、漢字の複雑な構造を再現できず、化けてしまう。

一方、Geminiのウェブコンソールで生成した画像では漢字が正しく描画されていた。なぜか?

答えはシンプルだった。Geminiのウェブ版は画像生成モデルではなく、テキストも画像も扱えるマルチモーダルLLMが画像を生成している。このLLMは日本語を「言語として理解」しているため、漢字を正しく描ける。


コードの変更

ghost_poster.py の画像生成部分を Imagen API から Gemini ネイティブ画像生成に変更した。

変更前(Imagen):

response = client.models.generate_images(
    model="imagen-4.0-generate-001",
    prompt=prompt,
    config=genai_types.GenerateImagesConfig(number_of_images=1),
)
image_bytes = response.generated_images[0].image.image_bytes

変更後(Gemini):

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=prompt,
    config=genai_types.GenerateContentConfig(
        response_modalities=["IMAGE"],
    ),
)
image_bytes = None
for part in response.candidates[0].content.parts:
    if part.inline_data and part.inline_data.mime_type.startswith("image/"):
        image_bytes = part.inline_data.data
        break

プロンプトも日本語に変更した。Geminiは日本語を理解するので、日本語で指示する方が意図が正確に伝わる。


3モデルの比較検証

「直った」と言い切る前に、実際に比較画像を生成して確認した。

失敗例(旧:Imagen)

Imagenで生成した失敗例 — 漢字が完全に文字化け

絵自体は悪くないが、テキストが全滅している。Imagenは日本語テキストの描画をそもそも想定していない。


比較1:gemini-2.5-flash-image

gemini-2.5-flash-image — まだ文字化けが残る

最初に試したが、文字化けが完全には解消しなかった。Imagenほどひどくはないが、まだ読めない漢字が混じっている。惜しい。


比較2:gemini-3.1-flash-image-preview(採用)

gemini-3.1-flash-image-preview — 漢字が正しく描画される

「株式分析」「市場」などのテキストが読める状態で生成された。このモデルを採用することにした。


参考:テキストなしプロンプト

テキストなしプロンプト — キャラクターだけのイラスト

「テキストを一切含まないキャラクターだけのイラスト」というプロンプトも試した。文字化け問題は完全に回避できるが、記事の内容と直接結びつくビジュアルにはなりにくい。


まとめ

「同じGoogle製でもImagenとGeminiでは日本語処理能力が根本的に違う」という発見だった。Imagenは英語ベースで設計された画像生成モデルであり、日本語テキストの描画はそもそも設計外だったのだろう。

Geminiは言語モデルとして日本語を理解しているため、プロンプトも出力テキストも正しく扱える。画像生成の品質は Imagen の方が高い場面もあるが、日本語ブログのアイキャッチ用途では Gemini 一択だ。