
Seedream 5.5 レイヤー分解後の再構成と文字編集
Seedream 5.5 の PNG レイヤーを矩形と重なり順で再構成し、取得した OCR を編集可能な文字に変換。広告や別言語版を作る前の確認方法も解説します。
目次
Seedream 5.5 のレイヤー分解は、ベース画像、透過 PNG レイヤー、配置メタデータを返します。編集可能なデザインにするには、アプリ側で各レイヤーをリサイズして配置し、重なり順を維持し、取得できた OCR からテキストオブジェクトを作る必要があります。PNG のダウンロードは、その作業の始まりです。
何を編集できる状態にするか決める
承認済みのポスターと、具体的な変更を1つ用意します。商品を動かすのか、見出しを差し替えるのか、別言語版を作るのかによって、必要な成果物は変わります。
| 成果物 | 変更できるもの | アプリ側で必要な作業 |
|---|---|---|
| 透過 PNG 1枚 | 画像全体の位置 | 合成と書き出し |
| ベース画像と PNG レイヤー | 分離した要素の位置と表示 | 拡大縮小、配置、重なり順、確認 |
| レイヤーとリッチテキスト OCR | 認識した文字と近似スタイル | ネイティブなテキストオブジェクト、フォント対応、組版、保存 |
必要な要素をリクエストする
doubao-seedream-5.5-layerize に、アクセス可能な PNG または JPEG を必ず1枚だけ渡します。通常生成とは入力条件が異なるため、複数参照画像の設定をそのまま使わないでください。API キーはサーバー側で保持します。model_params.text_recognition: true で OCR を要求できます。特定の要素が必要なら、ドキュメントにある自然言語または bbox 指定を使います。見えている物体がすべて独立するとは限りません。OCR は要求しても、レスポンスには存在しない場合があります。curl -X POST https://api.evolink.ai/v1/images/generations \
-H "Authorization: Bearer $EVOLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedream-5.5-layerize",
"image_urls": ["YOUR_PUBLIC_IMAGE_URL"],
"quality": "auto",
"output_format": "png",
"n": 30,
"model_params": {"text_recognition": true}
}'YOUR_PUBLIC_IMAGE_URL をサーバーからアクセスできる画像 URL に置き換えます。n: 30 はベースを含む出力上限で、30枚の出力保証ではありません。EvoLink の n は2〜100で、実際の出力はそれより少ないことがあります。解像度は quality: auto、1K、1.5K、2K で指定し、16:9 などの比率は使いません。id を保存し、GET /v1/tasks/{task_id} で完了を確認するか、失敗を処理します。配列の長さを固定せず、実際の result_data を読み取ります。ルートの仕様では、1レイヤーでも失敗するとリクエスト全体が失敗し、返金されます。結果リンクの有効期間は24時間なので、完了したファイルは速やかに保存してください。全仕様はLayerize API ドキュメントにあります。Seedream 5.5 の PNG レイヤーを再構成する
z_index: 0 で、値が大きいレイヤーほど上に重なります。配置は bounding_box から求め、座標の基準は出力されたベース画像です。入力ポスターやレイヤーファイル自体の座標系に置き換えてはいけません。
[left, top, right, bottom] の表示幅は right - left、高さは bottom - top です。この矩形にレイヤーをリサイズしてから、(left, top) に配置します。後ろの2値を幅と高さと解釈したり、ダウンロードしたファイルをすべて原寸で貼ったりしないでください。[1142, 528, 1474, 784]、つまり332×256ピクセルです。ファイル寸法だけでは配置を再現できない理由が分かります。この数値は公開サンプルの属性であり、他の出力寸法を保証しません。z_index をこの形式に対応付けます。座標は説明用なので、自分の結果のメタデータに置き換えてください。results が画像 URL、Layerize の説明にある result_data が配置や OCR を扱います。完全な応答とファイルを保存し、両者の対応を確認してからマニフェストを作ります。ベースは推測した名前ではなく z_index: 0 で識別します。現在の応答仕様に明記されていない限り、配列の添字で2つの情報を結び付けないでください。不明なら実際のタスク仕様を確認します。本ガイドは EvoLink の生成リクエストを実行せず、サンプルファイルのローカル合成のみを行いました。{
"base": "base.png",
"layers": [
{"file": "layer-1.png", "box": [120, 80, 420, 280], "z": 1}
]
}python -m pip install pillow で Pillow をインストールします。次のコードを reassemble.py に保存し、layers.json と画像を同じ場所に置いて python reassemble.py layers.json を実行します。ローカルの形状と順序を確認し、見た目を確認するプレビューを書き出すスクリプトです。編集可能な文字の再構築やモデル品質の認定は行いません。import json
import sys
from pathlib import Path
from PIL import Image
manifest = Path(sys.argv[1])
data = json.loads(manifest.read_text())
root = manifest.parent
with Image.open(root / data["base"]) as image:
canvas = image.convert("RGBA")
width, height = canvas.size
layers = data["layers"]
orders = [item["z"] for item in layers]
if any(type(z) is not int or z <= 0 for z in orders):
raise ValueError("Layer order must be a positive integer")
if len(set(orders)) != len(orders):
raise ValueError("Duplicate layer order")
for item in sorted(layers, key=lambda layer: layer["z"]):
box = item["box"]
if len(box) != 4 or any(type(v) is not int for v in box):
raise ValueError("Expected four integer box coordinates")
left, top, right, bottom = box
if not (0 <= left < right <= width and 0 <= top < bottom <= height):
raise ValueError("Box outside the base image or empty")
with Image.open(root / item["file"]) as image:
layer = image.convert("RGBA").resize(
(right - left, bottom - top), Image.Resampling.LANCZOS
)
canvas.alpha_composite(layer, dest=(left, top))
canvas.save(root / "reassembled.png")OCR から編集可能な文字を作る
text_recognition に全文、lines、各行の bounding_box、スタイル付きの runs が含まれることがあります。公式ガイドでは行の矩形もベース画像座標です。親レイヤーの位置をもう一度加算しないでください。similar_font_family を利用可能で使用許諾のあるフォントに対応付け、foreground_color とエディターが対応するスタイル属性を反映します。フォントと属性は推定です。装飾文字や手書き文字には OCR がないことがあるため、手作業での再構築か画像レイヤーの維持を選びます。画像の文字をネイティブな文字に置き換えるときは、対応するラスタ文字を非表示にし、新旧が重ならないようにします。複数行を含むレイヤーの1行だけを差し替えるなら、その行だけをマスクまたは除去し、他の行を残してください。あるいは必要な全文を再構築してから、元のラスタレイヤー全体を非表示にします。文字オブジェクト、フォント選択、レイアウトはアプリの文書として保存します。OCR データだけでは、保存済みの編集可能デザインにはなりません。
similar_font_family が unknown なら、必要な字形と使用許諾を満たす代替フォントを明示的に選び、配置を確認します。スタイルの false はモデルがその特徴を認識しなかったという意味で、原稿に存在しない証明ではありません。正確なデザイン属性ではなく認識の手掛かりとして扱います。デザインを歪めずに別形式へ展開する

x = normalized_x × target_width / 1000、y = normalized_y × target_height / 1000 を計算します。絶対矩形なら、実際の出力ベース画像の寸法を基準に換算します。全工程で一貫した座標変換を使ってください。正方形のポスターを縦長広告にするには、座標を掛け算するだけでは不十分です。余白を付けて収めるのか、切り抜くのか、要素を並べ直すのかを選びます。縦横を別々に伸縮すると商品や文字が歪むことがあります。物体を動かすと再構築された背景の不備が見える場合もあるため、新しく露出した領域を点検してください。元々隠れていた実景が復元されたとは限りません。
別言語版では、まず見出しを1つ置き換えます。字形の対応、改行、テキスト枠の高さ、視覚的な優先順位、前景との重なりを確認します。元の状態と編集状態は別に保存し、比較できるようにしてください。翻訳や組み直しはアプリの仕事であり、OCR が返るだけで自動的に完了しません。
バリエーションを増やす前に確認する
| 症状 | 最初の確認点 | 次の対応 |
|---|---|---|
| レイヤーが大きすぎる、位置がずれる | 矩形の解釈、ベース寸法、ファイルを矩形に合わせてリサイズ | 再リクエストの前に合成の変換を修正 |
| 重なり方が違う | z_index の昇順と表示状態 | 意図した順序に戻す |
| 文字が二重、行が消える | ラスタ文字の表示と置換範囲 | 各行の表現を1つに整理 |
| OCR がない、スタイルが不正確 | 整った文字か、どの OCR フィールドがあるか | 手作業で再構築するかラスタを残す |
変更前に再構成した元の画面を確認し、変更後は納品サイズで点検します。商品の同一性、輪郭、背景の補完、遮蔽、文章、最終書き出しを確認してください。座標が正しくても、ピクセル単位の復元やデザイン品質が保証されるわけではありません。
n 枚の2K出力相当を予約し、実際の出力数と各画像のピクセル区分で精算すると説明しています。大きな上限は多くの残高を予約しますが、変更に必要とは限りません。料金は既存の価格セクションで確認し、このガイドでは別の料金表を設けません。よくある質問
Seedream 5.5 は PSD を返しますか?
EvoLink のルート仕様は画像とメタデータの出力で、ネイティブ PSD ではありません。文書はエディターや書き出し機能で作成します。
n: 30 は前景レイヤーが30枚という意味ですか?
いいえ。ベースを含む全出力の上限です。実際は少ないことがあるため、返された項目を読み取ります。
レイヤー PNG の原寸を使うべきですか?
配置にはベース上の矩形を使います。ファイルが矩形より大きい場合は、合成前にリサイズします。
正規化座標でも再構成できますか?
はい。0〜1000の各角を対象キャンバスの寸法へ変換します。縦横比を変更する場合は、収める、切り抜く、並べ直すといった選択も必要です。
すべての文字レイヤーに OCR がありますか?
text_recognition の有無を確認します。整った文字が対象で、装飾文字や手書きには手作業が必要な場合があります。OCR は元のフォントを正確に特定しますか?
similar_font_family は近似であり、同一性やライセンスの証明ではありません。利用可能なフォントを選び、結果を確認します。位置が合わないときは再生成すべきですか?
まず順序、矩形の解釈、倍率を確認します。合成ミスならローカルで直せます。画像内容が不足したり使えなかったりする場合は、編集や再分解が必要になることがあります。
この例は EvoLink の出力品質を証明しますか?
いいえ。公式サンプルとローカル処理で仕様上の手順を説明しており、API 成功率、復元精度、速度を測定していません。
出典
- BytePlus Seedream 5.5 ガイド:公式のレイヤー/OCR 機能とサンプル。提供元のフィールド名は EvoLink と異なります。
- EvoLink Layerize API ドキュメント:モデル ID、入力、制限、タスク、精算。
- Pillow Image リファレンス:ローカルのリサイズとアルファ合成。


