2025年4月にリリースされたOpenAIの最新画像生成モデル「GPT Image 1」。今回は、その強力な画像編集機能を実際に試してみました。特に注目すべきは、既存の画像に新しい要素を自然に追加したり、複数の画像を合成したりできる機能です。
参考記事
この記事は以下のnote記事を参考にしています:
実際に試してみた2つの機能
1. 単一画像編集:海にゴジラを追加
まずは基本的な画像編集機能から。美しい夕焼けの海の画像に、巨大なゴジラを追加してみました。
Before: 平和な夕焼けの海
After: ゴジラが海から出現する劇的なシーン
合成結果は自然で、ゴジラが元の風景に馴染んでおり、違和感の少ない仕上がりとなりました。AIは自然な水しぶきや、巨大感を演出するスケール感も自動で追加してくれます。
2. 複数画像合成:アニメキャラクターと実写人物の融合
次に、GPT Image 1の特徴的な機能である複数画像の合成を試しました。アニメ「Paw Patrol」のキャラクターたちと、実写の女の子の写真を合成して、一つの自然なシーンを作成しました。
結果: 実写の女の子がアニメ風に変換され、Paw Patrolのキャラクターと手をつないで一緒に写っているシーン
アニメ調での合成は比較的自然に溶け込みますが、リアル調ではアニメと実写の組み合わせのため違和感が発生しやすい傾向があります。プロンプトの工夫により、マントなどの細部も再現しつつ、絵に溶け込んだ画像が生成可能です。
技術的な特徴
Input Fidelity(入力忠実度)
input_fidelity="high"を設定することで、元画像の重要な特徴(顔、ロゴ、細かいディテール)を高い精度で保持できます。これにより、元の画像の品質を高く保ちつつ、ある部分だけを修正することが実現できます。
複数画像対応
従来のDALL-E 3とは異なり、GPT Image 1は複数の画像を同時に入力として受け取ることができます(最大10枚)。これにより、異なる画像の要素を組み合わせた新しいシーンの創造が可能になります。
試してみた
単一画像編集
Add a massive Godzilla emerging from the sea in the center of this image. The monster should be towering above the water with dramatic splashes. Keep the beautiful sunset sky and boat
この画像の中央に、巨大なゴジラが海から出現し、ドラマチックなしぶきを上げて水面からそびえ立っています。美しい夕焼け空とボートはそのままにしてください。
- 元画像
これならゴジラが出てくる雰囲気だったでゴジラを出現させてみました。

結果の合成画像
違和感ありませんね。

複数画像合成
最近子供がパウパトロールにはまっているので、それを題材にしてみました。
Insert the real girl from the second image into the Paw Patrol group from the first image. She should hold hands with the main character. Convert her to 3D animated style while keeping all original characters
1枚目の画像のパウ・パトロールのグループに、2枚目の画像の実写の女の子を挿入してください。彼女はメインキャラクターと手をつなぐようにします。元のキャラクターは全員そのままに、女の子の姿を3Dアニメスタイルに変換してください。
- 元画像

(C)2023 Paramount Pictures. All rights reserved.
- 合成する画像

結果の合成画像
多少デフォルメされていますが、服装もかなり再現性のある感じアニメで自然な画像を合成されていて、手をつないでる部分も違和感ありませんね。多少、デフォルメされている部分はありますが、高解像度の処理も加わってますのでなかなかのすばらしい出来栄え。参考ですが、今回のように縦長と横長の画像する場合は、あらかじめサイズを指定したほうがよさそうです。

実装コード
実装例を以下に書いておきます。
api.txtにapiキーを保存しておく必要があります。
import base64
import os
from io import BytesIO
from PIL import Image
from openai import OpenAI
def load_api_key():
"""api.txtファイルからAPIキーを読み込む"""
try:
with open('api.txt', 'r', encoding='utf-8') as file:
api_key = file.read().strip()
return api_key
except FileNotFoundError:
print("api.txtファイルが見つかりません。")
return None
def edit_images(image_paths, prompt, output_filename=None, size=None):
"""
画像を編集・合成する統合関数
Args:
image_paths: 画像パスのリスト(単一の場合は[path]、複数の場合は[path1, path2, ...])
prompt: 編集指示のプロンプト
output_filename: 出力ファイル名(省略時は自動生成)
size: 出力サイズ(省略時はデフォルト)
"""
# APIクライアントの初期化
api_key = load_api_key()
if not api_key:
return None
client = OpenAI(api_key=api_key)
try:
# 画像ファイルを開く
if isinstance(image_paths, str):
image_paths = [image_paths] # 単一パスを配列に変換
image_files = []
for path in image_paths:
if not os.path.exists(path):
print(f"画像ファイル '{path}' が見つかりません。")
return None
image_files.append(open(path, "rb"))
# APIパラメータの設定
api_params = {
"model": "gpt-image-1",
"image": image_files[0] if len(image_files) == 1 else image_files,
"prompt": prompt,
"input_fidelity": "high",
"quality": "high",
"output_format": "jpeg"
}
# 複数画像の場合はサイズを指定
if len(image_files) > 1 and size:
api_params["size"] = size
# GPT Image 1で画像を編集
result = client.images.edit(**api_params)
# 結果の画像を保存
image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)
edited_image = Image.open(BytesIO(image_bytes))
# ファイル名の設定
if output_filename is None:
if len(image_files) == 1:
output_filename = f"edited_{os.path.basename(image_paths[0])}"
else:
output_filename = "composed_image.jpg"
# 結果を保存
output_folder = "art_output"
os.makedirs(output_folder, exist_ok=True)
output_path = os.path.join(output_folder, output_filename)
edited_image.save(output_path, "JPEG", quality=95)
print(f"編集完了: {output_path}")
# ファイルを閉じる
for file in image_files:
file.close()
return edited_image
except Exception as e:
print(f"編集エラー: {e}")
# エラー時もファイルを閉じる
for file in image_files:
if not file.closed:
file.close()
return None
# 使用例1: 単一画像編集(海にゴジラを追加)
def example_single_edit():
"""単一画像編集の使用例"""
edit_images(
image_paths="sunset_sea.jpg",
prompt="Add a massive Godzilla emerging from the sea in the center of this image. The monster should be towering above the water with dramatic splashes. Keep the beautiful sunset sky and boat.",
output_filename="godzilla_sea.jpg"
)
# 使用例2: 複数画像合成(アニメキャラ+実写人物)
def example_multiple_composition():
"""複数画像合成の使用例"""
edit_images(
image_paths=["paw_patrol.jpg", "girl_photo.jpg"],
prompt="Insert the real girl from the second image into the Paw Patrol group from the first image. She should hold hands with the main character. Convert her to 3D animated style while keeping all original characters.",
output_filename="anime_girl_composition.jpg",
size="1536x1024" # 横長フォーマット
)
if __name__ == "__main__":
print("GPT Image 1 画像編集のデモ")
print("1. 単一画像編集(ゴジラ追加)")
print("2. 複数画像合成(アニメ合成)")
choice = input("選択してください (1 or 2): ").strip()
if choice == "1":
example_single_edit()
elif choice == "2":
example_multiple_composition()
else:
print("無効な選択です")
コストと実用性について
料金面での課題
面白かったのでいろいろと作っていたのですが、結構な価格でした。

- 生成コスト: 15枚生成で4ドル超(日本円で600円〜700円程度)
- 1枚あたり: 約40円の計算
- 試行錯誤コスト: 1画像につき3〜4枚の生成が必要な場合も多く、実際のコストはさらに増大
サラリーマンが気軽に遊ぶような個人利用や頻繁なテストには、現状ではコスト面で課題があります。
まとめ
OpenAI GPT Image 1の画像編集機能は、従来の画像編集ツールでは困難だった「異なる画像の自然な合成」や「プロンプトベースの直感的な編集」を可能にしています。特に複数画像の合成機能は、クリエイティブな作業の可能性を大きく広げてくれます。
ただし、現時点ではコスト面での課題があり、プレビュー版という位置づけもあって、実用化には慎重な検討が必要です。技術的なポテンシャルは非常に高く動画編集などでも使えそうな技術なので楽しみです。


