API gpt-image-2 คือปลายทาง (endpoint) สำหรับการสร้างภาพใหม่ล่าสุดของ OpenAI ที่เปิดตัวพร้อม ChatGPT Images 2.0 เมื่อวันที่ 21 เมษายน 2026 หากคุณเคยเรียกใช้ API แชทหรือ API ฝังของ OpenAI มาก่อน การเพิ่มฟีเจอร์สร้างภาพใช้เพียงรูปแบบคำขอใหม่ คีย์ API ที่เหมาะสม และตั้งค่าเพียงไม่กี่นาที
บทความนี้โฟกัสเฉพาะ 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 เวิร์กโฟลว์แนะนำ:
- สร้าง request ใหม่ในคอลเลกชัน OpenAI เลือก
POSTที่https://api.openai.com/v1/images/generations - ใส่ header
Authorization: Bearer {{OPENAI_API_KEY}}; กำหนด API key ใน environment variable - วาง JSON body พร้อม prompt; Apidog ตรวจสอบ schema ให้ก่อนส่ง
- กด Send ได้ preview ภาพ, save ภาพที่ดี, tag ภาพที่ไม่ดี, ทำ A/B test พารามิเตอร์ได้
- บันทึก 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)