DEV Community

Cover image for วิธีใช้ gpt-image-2 API
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีใช้ gpt-image-2 API

API gpt-image-2 คือปลายทาง (endpoint) สำหรับการสร้างภาพใหม่ล่าสุดของ OpenAI ที่เปิดตัวพร้อม ChatGPT Images 2.0 เมื่อวันที่ 21 เมษายน 2026 หากคุณเคยเรียกใช้ API แชทหรือ API ฝังของ OpenAI มาก่อน การเพิ่มฟีเจอร์สร้างภาพใช้เพียงรูปแบบคำขอใหม่ คีย์ API ที่เหมาะสม และตั้งค่าเพียงไม่กี่นาที

ทดลองใช้ Apidog วันนี้

บทความนี้โฟกัสเฉพาะ API: วิธีตั้งค่าการยืนยันตัวตน, รายละเอียดพารามิเตอร์, ตัวอย่างโค้ด 3 ภาษา, การใช้โหมดการคิด, การสร้างภาพเป็นชุด, การจัดการ response, การดีบั๊ก error code, ข้อจำกัดอัตรา และเวิร์กโฟลว์ทดสอบที่ช่วยประหยัดเครดิตจาก prompt ที่ผิดพลาด สำหรับรีวิวเชิงผลิตภัณฑ์ของ ChatGPT Images 2.0 อ่าน บทวิเคราะห์ ChatGPT Images 2.0

เมื่อทำตามจบ คุณจะได้โค้ดที่ใช้งานได้จริง, คอลเลกชัน Apidog สำหรับการวนซ้ำ prompt, และเข้าใจค่าใช้จ่ายของแต่ละพารามิเตอร์ชัดเจน

ข้อกำหนดเบื้องต้น

เตรียม 4 อย่างนี้ก่อนเริ่ม:

  • บัญชี OpenAI ที่เข้า API ได้ (แยกต่างหากจาก ChatGPT Plus; ChatGPT ปกติไม่มีเครดิต API)
  • Tier ที่ถูกเรียกเก็บเงินได้ gpt-image-2 ใช้ได้ใน Tier 1 ขึ้นไป ต้องเพิ่มวิธีชำระเงินก่อน
  • API Key ที่มี scope images:write แนะนำใช้ project-scoped key สำหรับ production
  • เครื่องมือทดสอบที่ดูตัวอย่างรูปภาพได้ เริ่มจาก curl ในเทอร์มินัล แล้วเปลี่ยนไปใช้ API client จริงภายหลัง

ตั้งค่า API Key ใน shell หนึ่งครั้ง ตัวอย่างทั้งหมดจะใช้งานได้ทันที:

export OPENAI_API_KEY="sk-proj-..."

ปลายทางและการยืนยันตัวตน

เรียก gpt-image-2 ที่ปลายทางเดียวกับเวอร์ชันก่อน:

POST https://api.openai.com/v1/images/generations

แนบโทเคนใน header Authorization ทุกครั้ง ส่งข้อมูล JSON ประกอบด้วย model, prompt, และ output parameter:

curl https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "A sharp product hero image for an API testing platform, dark background",
    "size": "1024x1024",
    "n": 1,
    "quality": "high"
  }'

ผลลัพธ์ที่สำเร็จ: ได้ JSON มี array data ของภาพ หาก error จะได้ code และ message ในฟอร์แมตของ OpenAI (ตาราง error ดูด้านล่าง)

พารามิเตอร์คำขอ

แต่ละ field ใน request body ส่งผลต่อค่าใช้จ่ายและผลลัพธ์ นี่คือแผนที่พารามิเตอร์ gpt-image-2:

พารามิเตอร์ ประเภท ค่า หมายเหตุ
model สตริง gpt-image-2 จำเป็น
prompt สตริง สูงสุด 32,000 ตัวอักษร จำเป็น ยิ่งยาวยิ่งใช้ token มากขึ้น
size สตริง 1024x1024, 1024x1536, 1536x1024, 2000x1000, 1000x2000, 2000x667, 667x2000 กำหนด token output
quality สตริง standard, high high แพงกว่าประมาณ 2 เท่า เหมาะกับข้อความและ UI
n จำนวนเต็ม 1–10 batch request สไตล์เดียวกันทั้งชุด
thinking สตริง off, low, medium, high งบประมาณ reasoning
response_format สตริง url, b64_json URL หมดอายุใน 1 ชั่วโมง
user สตริง อิสระ สำหรับ abuse detection; ส่ง user ID ที่เข้ารหัส
background สตริง auto, transparent, opaque transparent ส่งเป็น PNG พร้อม alpha
seed จำนวนเต็ม int32 ใดๆ seed เดียวกัน + prompt เดียวกัน ผลลัพธ์ใกล้เคียงแต่ไม่เหมือน 100%

3 พารามิเตอร์ที่กระทบต้นทุนสูงสุด: size, quality, thinking ยิ่งขนาด/คุณภาพ/โหมด reasoning สูง ต้นทุนยิ่งเพิ่ม (สูงสุด 4–5 เท่าจากพื้นฐาน)

ตัวอย่าง Python

ใช้ OpenAI SDK (>=1.50.0) รองรับ gpt-image-2 ได้เลย:

import base64
from pathlib import Path
from openai import OpenAI

client = OpenAI()

response = client.images.generate(
    model="gpt-image-2",
    prompt=(
        "A minimalist diagram of an OAuth 2.1 authorization code flow with PKCE. "
        "Five boxes labeled in English: User, Client, Auth Server, Resource Server, Token. "
        "Sharp sans-serif text, off-white background, teal accent arrows."
    ),
    size="1536x1024",
    quality="high",
    n=2,
    thinking="medium",
    response_format="b64_json",
)

out_dir = Path("out")
out_dir.mkdir(exist_ok=True)

for i, image in enumerate(response.data):
    png_bytes = base64.b64decode(image.b64_json)
    (out_dir / f"oauth_{i}.png").write_bytes(png_bytes)

print(f"Generated {len(response.data)} images into {out_dir.resolve()}")
  • response.data เป็น list เสมอ วน loop แม้ n=1
  • b64_json เหมาะกับสคริปต์ local ส่วน url ดีกว่าสำหรับ CDN หรือ S3 (ไม่ต้องแปลงไฟล์ซ้ำ)

ตัวอย่าง Node.js / TypeScript

import fs from "node:fs/promises";
import OpenAI from "openai";

const client = new OpenAI();

const response = await client.images.generate({
  model: "gpt-image-2",
  prompt:
    "Dashboard UI mockup for a REST client, sentence-case labels, latency sparkline in the top-right, cool grey palette.",
  size: "1536x1024",
  quality: "high",
  n: 4,
  thinking: "medium",
  response_format: "b64_json",
});

await Promise.all(
  response.data.map(async (image, i) => {
    if (!image.b64_json) return;
    await fs.writeFile(`dash_${i}.png`, Buffer.from(image.b64_json, "base64"));
  }),
);

console.log(`Saved ${response.data.length} images`);

แนะนำใช้ SDK ทางการแทน fetch โดยตรง เพื่อได้ฟีเจอร์ retry, idempotency header, stream, และ schema update อัตโนมัติ

โหมดการคิด: ควรใช้เมื่อใด

พารามิเตอร์ thinking คุมระดับ reasoning ก่อนเรนเดอร์ มี 4 ระดับ:

  • off: เร็ว ถูก ดีสำหรับ prompt เชิงสร้างสรรค์ที่ไม่ต้องเป๊ะ
  • low: วางแผนเล็กน้อย เหมาะกับภาพ product/hero
  • medium: reasoning หนักขึ้น เหมาะกับ diagram, infographic, slide, หรือ prompt ที่มีจำนวน element บังคับ
  • high: reasoning สูงสุด ใช้กับ layout หลายภาษา หรือเทคนิคที่ซับซ้อนเท่านั้น (แพง-ช้า)

ทิป: prompt ระบุจำนวน, label, หรือตำแหน่ง เพิ่มระดับขึ้น 1; prompt ทั่วไปลดระดับลง 1

ค่าใช้จ่าย reasoning เพิ่ม token เพิ่มเติม นอกเหนือจาก output token เช็ค OpenAI Pricing และกันงบเพิ่ม 1.2–2 เท่าของภาพพื้นฐานเมื่อเปิด medium หรือ high

การสร้างภาพเป็นชุด

ตั้งค่า n > 1 เพื่อสร้างหลายภาพพร้อมกันใน style เดียวกัน ต่างจากการยิง request ทีละภาพ เอาต์พุตแบบ batch ให้ความสอดคล้อง (consistency) เหมือนทีมดีไซน์:

response = client.images.generate(
    model="gpt-image-2",
    prompt="Four different hero illustrations for an API documentation landing page, shared color palette, shared line weight.",
    size="1536x1024",
    quality="high",
    n=4,
    thinking="low",
)

จ่ายตามจำนวนภาพ n=4 แพงขึ้น 4 เท่าเทียบกับ n=1 ข้อดีคือความสอดคล้อง ไม่ใช่ปริมาณงาน

รูปแบบการตอบกลับและการจัดเก็บ

เลือก b64_json หรือ url ตาม use case:

  • b64_json: รูปภาพฝังใน response เหมาะกับสคริปต์ local แต่ payload ใหญ่ (PNG 2000px อาจเกิน 3MB)
  • url: รูปอยู่บน CDN OpenAI 1 ชั่วโมง เหมาะกับ serverless/edge/forward ไป S3 หรือ Cloudflare Images

แนะนำ production: โหลดภาพจาก URL แล้วอัปโหลดเก็บเอง หลีกเลี่ยงส่ง URL ของ OpenAI ให้ user โดยตรง

การจัดการข้อผิดพลาดและข้อจำกัดอัตรา

gpt-image-2 ใช้รูปแบบ error ของ OpenAI นี่คือตัวอย่าง error ที่พบได้บ่อย:

HTTP code สาเหตุ วิธีแก้ไข
400 invalid_request_error ขนาดไม่ถูกต้อง หรือ prompt ยาวเกิน 32k เช็คขนาดและตัด prompt
401 invalid_api_key ไม่มีหรือคีย์ผิด ตั้ง OPENAI_API_KEY ใหม่
403 insufficient_quota เครดิตหมด หรือยังอยู่ Free tier เติมเงิน, อัปเกรด tier
429 rate_limit_exceeded ยิง request เกิน limit backoff + jitter; retry ตาม Retry-After
429 image_generation_user_error โดนนโยบายเนื้อหา เปลี่ยน prompt
500 server_error ปัญหาที่ฝั่ง OpenAI retry ด้วย exponential backoff
503 overloaded ระบบเต็ม รอคิว รอสักครู่แล้ว retry

ข้อจำกัดอัตรา (rate limit) แยกตาม tier: Tier 1 เริ่มต้น ~50 req/min; สูงขึ้นเมื่ออัปเกรด tier ตรวจสอบ header x-ratelimit-remaining-requests และ x-ratelimit-remaining-tokens ทุกครั้ง เพื่อลดสปีดก่อนชน limit

ตัวอย่าง retry error ที่ควร retry เฉพาะ error ที่ retry ได้จริง:

import time
from openai import OpenAI, RateLimitError, APIStatusError

client = OpenAI()

def generate_with_retry(prompt: str, tries: int = 3):
    delay = 1.0
    for attempt in range(tries):
        try:
            return client.images.generate(
                model="gpt-image-2",
                prompt=prompt,
                size="1024x1024",
                quality="high",
                n=1,
            )
        except RateLimitError:
            time.sleep(delay)
            delay *= 2
        except APIStatusError as e:
            if 500 <= e.status_code < 600 and attempt < tries - 1:
                time.sleep(delay)
                delay *= 2
                continue
            raise
    raise RuntimeError("gpt-image-2 retries exhausted")

ไม่ควร retry error 400, 401 หรือ 429 ที่เกี่ยวกับนโยบายเนื้อหา เพราะจะเสียเครดิตเปล่า

การทดสอบ API ด้วย Apidog

การวน loop prompt สร้างภาพจากเทอร์มินัลช้า, เทียบพารามิเตอร์ไม่ได้, และเก็บ version prompt ได้ยาก ใช้ API client เฉพาะทางช่วยให้ workflow ดีขึ้น

Apidog รองรับ gpt-image-2 แบบ native เวิร์กโฟลว์แนะนำ:

  1. สร้าง request ใหม่ในคอลเลกชัน OpenAI เลือก POST ที่ https://api.openai.com/v1/images/generations
  2. ใส่ header Authorization: Bearer {{OPENAI_API_KEY}}; กำหนด API key ใน environment variable
  3. วาง JSON body พร้อม prompt; Apidog ตรวจสอบ schema ให้ก่อนส่ง
  4. กด Send ได้ preview ภาพ, save ภาพที่ดี, tag ภาพที่ไม่ดี, ทำ A/B test พารามิเตอร์ได้
  5. บันทึก environment สำหรับ thinking: off, medium, high เพื่อเปรียบเทียบผลลัพธ์

ฟีเจอร์ compare ของ Apidog ช่วยให้ปรับแต่ง parameter ทีละตัว เห็นผลลัพธ์ก่อน/หลังชัดเจน และบันทึก prompt ที่ผ่านการทดสอบลงคลังกลางของทีม

ถ้ามาจาก HTTP client หรือ Postman เดิม ดาวน์โหลด Apidog แล้วเชื่อมต่อ API key ของคุณ ตั้งค่าน้อยกว่า 5 นาที หากต้องการศึกษาเพิ่มเติม อ่าน คู่มือการทดสอบ API โดยไม่ใช้ Postman และ ภาพรวม Apidog VS Code Extension

ข้อผิดพลาดที่พบบ่อย

ข้อผิดพลาดที่ทำให้เสียเครดิตและเวลาบ่อยในสัปดาห์แรก:

  • ใช้ quality: "standard" กับ prompt ที่มีข้อความเยอะ: ข้อความเล็กจะเบลอหรือผิด; ควรใช้ high ถ้าเน้น label, icon, UI
  • Over-prompting: 32k ตัวอักษรคือขีดสูงสุด ไม่ใช่เป้าหมาย เกิน 500 คำโมเดลเริ่มไม่สนใจคำสั่งก่อนหน้า ใช้ thinking แทนการขยาย prompt
  • คาดหวัง deterministic output จาก seed: seed ลดความสุ่มแต่ไม่ได้ล็อกผลลัพธ์ 100% ถ้าต้องการภาพเดิมเป๊ะ ให้ cache byte output
  • ส่ง OpenAI image URL ให้ user: URL หมดอายุใน 1 ชั่วโมง ควร copy เก็บเองก่อนให้บริการ
  • ยิง endpoint แบบ tight loop: การสร้างภาพช้า ควรใช้ worker หลายตัว, เคารพ rate limit headder, หลีกเลี่ยง loop แน่นๆ

คำถามที่พบบ่อย

gpt-image-2 ต่างจาก gpt-image-1 ยังไง (ในระดับ API)? endpoint และ authentication เหมือนเดิม เพิ่ม parameter thinking, ค่า size ใหญ่ขึ้น (สูงสุด 2000px), n สูงสุด 10 พร้อม style เดียวกัน; SDK เดิมใช้ต่อได้ แค่เพิ่ม parameter ใหม่ รายละเอียดเทียบกัน อ่าน ภาพรวม ChatGPT Images 2.0

วิธี prototyping การ integrate gpt-image-2 ที่เร็วที่สุด? สร้าง request ใน Apidog, บันทึก environment สองชุด (standard vs reasoning), วน loop prompt ไม่ต้องเขียนโค้ด ส่งออกเป็น curl หรือ SDK code เมื่อต้องใช้จริง

API รองรับ image editing / inpainting หรือไม่? endpoint สำหรับ editing/variation อยู่ในรูปแบบเดียวกับเวอร์ชันก่อน (model ID ใหม่) ดู OpenAI model reference สำหรับ schema ล่าสุด มี parameter สำหรับ mask และ input image

ใช้ gpt-image-2 เชิงพาณิชย์ได้หรือไม่? ได้ ภายใต้นโยบาย OpenAI คุณเป็นเจ้าของภาพ OpenAI สงวนสิทธิ์ใช้ input/output เพื่อตรวจสอบการละเมิด ตัวละคร trademark และบุคคลสาธารณะยังถูกจำกัด

ต้นทุน production เป็นยังไง? ประมาณ $0.21 ต่อภาพ 1024x1024 คุณภาพ high, 10,000 ภาพ/เดือน ~$2,100 (ไม่เปิด reasoning); reasoning เพิ่มอีก 20–80% เปรียบเทียบทางเลือก self-host เช่น GLM 5V Turbo API หรือ Qwen 3.5 Omni ถ้างบจำกัด

มี open-source หรือทางเลือกที่ render ข้อความได้ดีใกล้เคียงในราคาถูกไหม? ขณะนี้ยังไม่มีที่คุณภาพเท่ากันโดยเฉพาะกับภาษา CJK/Indic open-source ตีตื้นเรื่อง layout แล้วแต่ยังไม่เทียบเท่าในข้อความหลายภาษา

Top comments (0)