🖼️

OpenAI - GPT Image API の概要

に公開

OpenAIは日本時間2025年4月24日に新たな画像生成APIを公開しました。ジブリ風画像の生成で話題になった画像生成を利用可能なAPIです。

個人的に利用機会が多いAPIだと思ったため、以下の4つのページから重要な点を抜き出してまとめてみました。間違いなどあればご指摘ください。

概要

  • OpenAIのGPT Image APIは、最先端のマルチモーダルモデルを用いてテキストから画像生成や編集を行うAPIサービス
  • 最新モデル「GPT Image 1」がその中心にあり、大規模言語モデルのテキスト理解力と画像生成能力を兼ね備え、高い画像生成能力と指示追従性を持つ。
  • 特長:
    • 高精細な画像生成と詳細な指示の忠実な再現
    • テキストを含む画像 (看板など) の正確な描画
    • 背景透過画像の生成
    • 画像編集・部分編集機能
  • APIからの応答はBase64形式で取得可能
  • GPT Image APIではDALL-Eシリーズも選択可能だが本記事では割愛


GPT Image APIによるテキスト入り画像の例

利用可能なエンドポイントと機能

画像生成エンドポイント

  • テキストプロンプト (説明文) から新規画像を生成
  • ユーザーはpromptパラメータに詳細な指示を記述するだけでモデルが画像を生成する
  • 例: 「夏の海辺で夕日を背に波打ち際を歩くロボットの写真」
  • GPT Image 1モデルはシーンの文脈理解や世界知識が豊富で、地名や物体の質感まで反映したリアル画像生成が可能
  • デフォルトでは1回のリクエストで1枚の生成だが、nパラメータにより複数画像を一度に生成可能

画像編集エンドポイント

  • 既存の画像を入力として、その画像を部分的に編集・変換
    • 「この風景写真を油絵風の芸術スタイルに変換して」
    • 「建物の看板に店名を追加して」
    • 「この4つの果物が入ったカゴの画像を作って」
  • imageパラメータに編集元の画像ファイル、promptパラメータに編集内容の指示を指定
  • マスクなしでimageのみ指定した場合は、元画像全体をプロンプトに沿って変換
    • 全体的なスタイル変更やフィルター適用などに適している
    • 例: 「この写真を水彩画風にして」「この風景を夜景に変換して」
  • maskパラメータでマスク画像を指定可能 (マスクで示した領域のみが編集対象)
    • マスクを使うことで、人物写真の背景だけ別の風景に差し替えたり、商品画像の一部だけ色を変えるといった部分編集が実現可能
    • マスク画像は透過PNG形式で、透明部分が編集したい領域、不透明部分が保護したい領域を表す
    • マスク画像の寸法は元画像と同一である必要あり
  • 複数の入力画像を組み合わせた編集も可能 (例: 2枚の画像を合成)
    • imageパラメータに画像ファイルの配列を渡して実現
    • 例: 「この猫の画像と帽子の画像から、帽子を被った猫の画像を作って」
  • 高度なインペイント/部分編集も可能
    • 特定の物体を別のものに置換 (例: 「この写真の車を赤いスポーツカーに変更して」)
    • 画像内の特定要素のスタイルだけを変更 (例: 「この人物の服だけをビジネススーツに変えて」)
    • 物体の追加 (例: 「この室内写真にソファを追加して」)

API費用

  • API費用は画像生成リクエスト毎のトークン消費量に基づいて計算
  • リクエストで使用されるトークンは、以下の3種類に分類:
    • テキスト入力トークン: プロンプト(指示テキスト)のトークン数、料金は$5.00/100万トークン
      • プロンプトが長文でもコストへの影響はごく小さい
    • 画像入力トークン: 入力画像ファイルおよびマスクのトークン数、料金は$10.00/100万トークン
      • 画像サイズが大きいほどトークン数も増加
      • 編集リクエストでは元画像の解像度に応じた画像入力トークンが発生
    • 画像出力トークン: 生成画像のトークン数、料金は$40.00/100万トークン(最も主要なコスト要因)
      • 高解像度・高品質の画像ほど出力トークン数が増え、費用も高くなる
  • 品質と解像度ごとのおおよその出力トークン数と費用の比較:
品質レベル 出力解像度(正方形1024×1024) 出力解像度(縦長1024×1536) 出力解像度(横長1536×1024)
低 (Low) 約272トークン(≒$0.01) 約408トークン(≒$0.02) 約400トークン(≒$0.02)
中 (Medium) 約1056トークン(≒$0.04) 约1584トークン(≒$0.06) 約1568トークン(≒$0.06)
高 (High) 約4160トークン(≒$0.17) 約6240トークン(≒$0.25) 約6208トークン(≒$0.25)
  • 実際の課金額はプロンプト長や入力画像の有無によって若干前後するが、大半のケースでは1枚数セント~数十セント(高くて50円くらい)の範囲に収まる
  • 正式な価格表も参照してください

出力カスタマイズ方法

GPT Image APIでは、生成される画像のサイズや品質、形式などを細かく指定するためのパラメータが用意されています。これにより、用途に応じた出力のカスタマイズが可能です。主要なカスタマイズ項目とその指定方法は次のとおりです。

  • 画像サイズ (size)

    • sizeパラメータに "1024x1024", "1024x1536", "1536x1024", "auto" のいずれかを指定
    • デフォルトは"auto"
    • これ以外のサイズは指定不可 (エラーとなる)
  • 品質レベル (quality)

    • "low", "medium", "high", "auto"の4つ
    • qualityを低く設定すると生成が高速・低コストになるが、画像の細部が粗くなる
    • 高品質に設定するとより滑らかで詳細な画像になるが応答時間が長くコストも上昇する
    • 指定しない場合、gpt-image-1では"auto"がデフォルト
  • 背景透過指定 (background)

    • gpt-image-1モデルでは出力画像の背景を透明にする機能あり
    • backgroundパラメータに "transparent" を指定
    • 背景ピクセルが透明 (アルファチャンネル0) として生成される
    • 背景透過を使う場合、response_formatでPNGもしくはWebPを選ぶ必要あり(JPEGは透過情報を保持できない)
    • 透過背景指定をしない場合、通常は背景もシーンの一部として描画される
      • 例えば屋外の風景や単色背景などプロンプトに応じた背景が自動生成される
  • 出力フォーマット (response_format, format)

    • Base64エンコード画像データのみ対応
      • DALL-Eで選択可能だったURLはもう選択できない
    • ファイル形式はJPEG/PNG/WebPから選択可能 (デフォルトはPNG)
    • JPEG/WebPではoutput_compressionパラメータ(0-100%)を用いてファイルサイズを小さくすることも可能
  • 同時生成数 (nパラメータ):

    • gpt-image-1では複数枚の同時生成が可能
    • nに2以上を指定すると一度のAPI呼び出しで複数の画像を取得可能
    • 大量に並列生成する場合はトークン使用量やレート制限に注意

以上のカスタマイズ項目を活用することで、APIから得られる画像をアプリケーションの要件に合わせて最適化できます。例えば「Web用に軽量なJPEGで欲しい」「商品画像として背景透明PNGが必要」「アニメ風のはっきりした色使いにしたい」など、多様なニーズに合わせて柔軟に出力をコントロールできる点はGPT Image APIの大きな魅力だと言えそうです。

Pythonコード例

画像生成の例

import base64
from openai import OpenAI
client = OpenAI()  # 適宜APIキーを設定すること

result = client.images.generate(
    model="gpt-image-1",
    prompt="Draw a rocket in front of a blackhole in deep space",
    size="1024x1024"
)

image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)

# ファイルへ保存
with open("blackhole.png", "wb") as f:
    f.write(image_bytes)


上記コードの実行例

画像編集の例 (画像参照による合成)

4つの入力画像を使用して、参照画像内のアイテムが入ったギフトバスケットの新しい画像を生成する例。

from openai import OpenAI
client = OpenAI()

result = client.images.edit(
    model="gpt-image-1",
    image=[
      open("body-lotion.png", "rb"),
      open("bath-bomb.png", "rb"),
      open("incense-kit.png", "rb"),
      open("soap.png", "rb"),
    ],
    prompt="Generate a photorealistic image of a gift basket on a white background labeled 'Relax & Unwind' with a ribbon and handwriting-like font, containing all the items in the reference pictures"
)

image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)

# Save the image to a file
with open("gift-basket.png", "wb") as f:
    f.write(image_bytes)

画像編集の例 (マスクを使用した画像編集)

  • 編集およびマスクする画像は、同じ形式とサイズ (25MB未満) である必要がある
  • マスク画像にはアルファチャンネルも必要
    • 画像編集ツールを使用してマスクを作成する場合は、必ずアルファチャンネル付きでマスクを保存すること

from openai import OpenAI
client = OpenAI()

result = client.images.edit(
    model="gpt-image-1",
    image=open("sunlit_lounge.png", "rb"),
    mask=open("mask.png", "rb"),
    prompt="A sunlit indoor lounge area with a pool containing a flamingo"
)

image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)

# Save the image to a file
with open("composition.png", "wb") as f:
    f.write(image_bytes)

透過PNG生成の例

from openai import OpenAI
import base64
client = OpenAI()

result = client.images.generate(
    model="gpt-image-1",
    prompt="Draw a 2D pixel art style sprite sheet of a tabby gray cat",
    size="1024x1024",
    background="transparent",
    quality="high",
)

image_base64 = result.json()["data"][0]["b64_json"]
image_bytes = base64.b64decode(image_base64)

# Save the image to a file
with open("sprite.png", "wb") as f:
    f.write(image_bytes)

GPT Image API 制限事項

出力仕様の制限

  • 出力解像度とアスペクト比:
    • 利用可能な画像解像度は限定的: 1024×1024 (正方形), 1024×1536 (縦長), 1536×1024 (横長)のみ
    • 512pxや256pxなどの小さいサイズには対応していない
    • 小さなサムネイルが必要な場合は、生成後にアプリケーション側での縮小処理が必要

パフォーマンス上の制限

  • 遅延: 複雑なプロンプトの処理には最大2分かかる場合がある
  • リクエスト頻度とレートリミット:
    • 組織(APIキー)ごとに分毎のリクエスト数や画像生成枚数に上限あり
    • 1分あたり数十〜数百枚程度がデフォルトの上限
    • レート制限の最新情報はOpenAIダッシュボードのLimitsページで確認可能
    • gpt-image-1は計算資源負荷が高いため、初期上限は低めに設定

品質と表現の制限

  • テキストレンダリング: DALL·Eシリーズと比較して改善されているが、正確なテキストの配置と明瞭さにはまだ課題がある
  • 一貫性: 基本的な一貫したイメージは生成できるが、複数の生成にわたって登場するキャラクターやブランド要素の視覚的一貫性の維持は難しい場合がある
  • 構成制御: 指示の遵守は改善されているものの、構造化された複雑なレイアウトや正確な要素配置が必要な構成では課題がある

入力仕様の制限

  • 入力画像の仕様:
    • 形式はPNGが推奨、マスクは必ずPNG(アルファチャンネル付き)
    • ファイルサイズは25MBまで
    • 複数画像入力による編集では、画像の寸法は出力と同じ縦横比・サイズが必要
    • マスク画像は編集対象領域を透明にしたPNGを用意(透過部分=編集箇所)

その他の制約

  • 再現性: 特定のシード値を指定して完全に同一の画像を再生成する機能は提供されていない
    • 同一のプロンプトでも毎回多少異なる結果が返ってくる
  • 組織認証: API利用開始にあたって組織認証が必要

コンテンツフィルタリング

  • OpenAIの定める利用規約およびコンテンツポリシーに従い、APIはリクエストおよび生成結果のモデレーション (内容チェック) を自動的に実施
  • ユーザーがAPIに送信したプロンプトおよびモデルが生成しようとする画像内容をスキャン
  • ポリシー違反に該当する内容が検知された場合、APIはエラーレスポンスを返し、該当の画像は生成されない
  • モデレーション強度はリクエストのオプション引数moderationで調整可能
    • "auto": デフォルト
    • "low": フィルタリングの制限が少なくなる
  • 禁止されているコンテンツ例:
    • 露骨な性的描写やヌード
    • 過度な暴力表現
    • 違法行為の示唆
    • ヘイトスピーチや差別的表現
    • 自傷行為の助長
    • 政治的なミスリーディング
    • 知的財産権の侵害に繋がる恐れのある生成
  • OpenAIはポリシー遵守の範囲内であれば、API利用者が生成した画像を商用利用することも認めている

Discussion