アイキャッチ画像の漢字が文字化けしていた話 — ImagenからGeminiへの移行
ブログに掲載されているアイキャッチ画像を確認したとき、正直「これは大問題だ」と思った。

漢字が完全に文字化けしている。
「株式」が「桰弌」になり、「分析」が意味不明な文字列になっていた。絵のタッチは可愛いのに、テキストが全滅している。
なぜ文字化けするのか
このシステムはアイキャッチ画像の生成に Google Imagen(imagen-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は日本語テキストの描画をそもそも想定していない。
比較1:gemini-2.5-flash-image

最初に試したが、文字化けが完全には解消しなかった。Imagenほどひどくはないが、まだ読めない漢字が混じっている。惜しい。
比較2:gemini-3.1-flash-image-preview(採用)

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

「テキストを一切含まないキャラクターだけのイラスト」というプロンプトも試した。文字化け問題は完全に回避できるが、記事の内容と直接結びつくビジュアルにはなりにくい。
まとめ
「同じGoogle製でもImagenとGeminiでは日本語処理能力が根本的に違う」という発見だった。Imagenは英語ベースで設計された画像生成モデルであり、日本語テキストの描画はそもそも設計外だったのだろう。
Geminiは言語モデルとして日本語を理解しているため、プロンプトも出力テキストも正しく扱える。画像生成の品質は Imagen の方が高い場面もあるが、日本語ブログのアイキャッチ用途では Gemini 一択だ。