mcpField
A
ai-image-generator

ai-image-generator

github.com/jezweb创意与媒体1.1k1.4k 次安装3 周前更新
代码仓库

关于 ai-image-generator

为 Claude Code 提供使用 Google Gemini 和 OpenAI API 生成图像的提示词方法与 API 操作指导。适合需要制作写实场景、含文字图像、透明图标或多版本构图的创作者。

主要功能

  1. 01按图像需求选择模型
  2. 02使用五部分框架编写提示词
  3. 03生成文字图像和多版本图像
  4. 04使用参考图进行合成
  5. 05通过 Gemini 多轮编辑图像
  6. 06提供图像检查与优化流程

适用场景

  1. 01制作带标题的海报或信息图
  2. 02为产品图组合生活场景
  3. 03探索同一构想的多种视觉样式
  4. 04生成透明背景的图标或标志

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jezweb/claude-skills --skill ai-image-generator

安装后在 Claude Code 中输入/ai-image-generator确认已加载。

附带文件references/prompting-guide.md

详细介绍

AI 图像生成器

使用 AI API(Google Gemini 和 OpenAI GPT)生成图像。本技能将介绍提示词模式和 API 机制,帮助你直接通过 Claude Code 生成专业图像。

托管式替代方案:如果你不想管理 API 密钥,ImageBot 提供托管式图像生成服务,并支持相册模板和品牌套件。

模型选择

根据需求选择合适的模型:

需求模型原因
写实场景/图库照片Gemini 3.1 Flash Image景深、复杂度和环境背景表现最佳
最终客户场景(细节更丰富)Gemini 3 Pro Image细节更丰富,风格一致性更好
图像中的文字(海报、带文案的 OG 图像、信息图)GPT Image 2文字渲染确实有效,包括多种文字体系
探索 10 种风格变体GPT Image 2原生批量生成——一个提示词生成 10 种变体,共享构图和配色
多参考图合成(产品+生活方式)GPT Image 2能在多张参考图之间处理光照、比例和透视
透明图标/徽标GPT Image 1.5原生 RGBA 透明通道——GPT Image 2 不支持透明背景
快速草稿/迭代Gemini 2.5 Flash Image免费额度(约 500 次/天)

经验法则:任何包含可读文字的图像 → GPT Image 2(除非需要透明背景,此时用 GPT 1.5)。其他情况 → Gemini。

模型 ID
模型API ID提供方
Gemini 3.1 Flash Imagegemini-3.1-flash-image-previewGoogle AI
Gemini 3 Pro Imagegemini-3-pro-image-previewGoogle AI
Gemini 2.5 Flash Imagegemini-2.5-flash-imageGoogle AI
GPT Image 2(默认)gpt-image-2OpenAI
GPT Image 2(ChatGPT 同等输出)chatgpt-image-latestOpenAI
GPT Image 1.5(仅用于透明背景)gpt-image-1.5OpenAI

使用前请确认模型 ID——它们经常变更:

curl -s "https://generativelanguage.googleapis.com/v1beta/models?key=$GEMINI_API_KEY" | python3 -c "import sys,json; [print(m['name']) for m in json.load(sys.stdin)['models'] if 'image' in m['name'].lower()]"

GPT Image 2 详细说明

于 2026-04-22 发布。有三项能力会改变你选择它的时机。

1. 文字渲染确实有效

海报、带标题的 OG 图像、带标签的信息图、UI 模拟图、价格卡片。文字渲染可靠,包括非拉丁文字体系(日语、韩语、印地语、孟加拉语)。这是从 Gemini 切换过来的主要原因——Gemini 完全无法渲染可读文字。

2. 多变体批量生成

一次提示词调用即可生成最多 10 张图像。各变体共享构图和配色,但细节有所不同。适用于确定风格前的探索、为客户提供 A/B 选项以及快速构思。

3. 多参考图合成

在提示词中附带参考图——产品照片、生活场景、徽标。模型会以正确的光照、比例和透视将产品放入场景中。无需多轮编辑即可实现“产品融入场景”的工作流。

模式
  • 即时模式(默认,适用于所有套餐)——不经过规划步骤,直接生成。速度快,足以满足大多数需求。
  • 思考模式(Plus/Pro/Business 套餐)——绘制前先规划布局。需要元素数量准确(“一排 3 个图标”“5 条功能要点”)或文字必须出现在特定区域时使用。处理复杂构图时可减少重试次数。
宽高比

从 3:1 超宽到 1:3 超高,还包括 1:1、3:2、2:3、16:9、9:16。范围比其他模型更广——适用于网站横幅(超宽主视觉)或移动端故事格式(超高图像)。

分辨率

标准模式下长边最高可达 2K。4K 目前处于 Beta 阶段。

生成时间

**复杂提示词最多需要 2 分钟。**请构建异步 UX——不要阻塞等待响应。显示进度,或在后台启动任务并轮询状态。

限制
  • **不支持透明背景。**需要 PNG 透明背景时,请改用 gpt-image-1.5。
  • 首次调用时,端点可能要求进行 API 组织验证——如果遇到身份验证错误,请在 OpenAI 账户设置中启用该选项。
定价(每张 1024×1024 图像)
质量成本
低$0.006
中$0.053
高$0.211

Token 定价:输入文本 $5/M,输出文本 $10/M,输入图像 $8/M,输出图像 $30/M。

5 部分提示词框架

按以下顺序构建提示词,以获得一致的结果:

1. 图像类型

设定体裁:“一张逼真的照片”“一幅等距插画”“一个扁平矢量图标”

2. 主体

说明人物或事物,并提供具体细节:“一位亲切随和、30 岁出头的澳大利亚女性,自然地微笑着”

3. 环境

说明场景和空间关系:“在明亮的现代住宅中,身后的木架上摆放着陶土色装饰”

4. 技术规格

说明相机和光线:“使用 85mm f/2.0 拍摄,自然窗光,头肩构图”

5. 限制条件

说明要排除的内容:“照片级写实,不要文字、不要水印、不要徽标”

示例(好与差)
BAD — keyword soup:
"professional woman, spa, warm lighting, high quality, 4K"

GOOD — narrative direction:
"A professional skin treatment scene in a warm clinical setting.
A practitioner wearing blue medical gloves uses a microneedling pen
on the client's forehead. The client lies on a white treatment bed,
eyes closed, relaxed. Warm golden-hour light from a window to the
left. Terracotta-toned wall visible in the background. Shot at
85mm f/2.0, shallow depth of field. No text, no watermarks."

工作流

1. 确定图像需求
用途宽高比模型
主视觉横幅(无文字)16:9 或 21:9Gemini
带标题文案的主视觉横幅16:9 或 3:1 超宽幅GPT Image 2
服务卡片4:3 或 3:4Gemini
个人资料 / 头像1:1Gemini
图标 / 徽章(透明背景)1:1GPT Image 1.5
OG / 社交分享图(无文字)1.91:1Gemini
带文案的 OG / 社交分享图1.91:1GPT Image 2
海报 / 信息图 / 价格卡片 / 任何文字密集型内容不定GPT Image 2
风格探索(同一概念的 10 个变体)任意GPT Image 2(批量)
Instagram 帖子1:1 或 4:5Gemini
移动端主视觉9:16Gemini
2. 编写提示词

使用 5 部分框架。详细的摄影参数请参阅 references/prompting-guide.md。

3. 通过 API 生成
Gemini(Python — 可正确处理 shell 转义)
python3 << 'PYEOF'
import json, base64, urllib.request, os, sys

GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY")
if not GEMINI_API_KEY:
    print("Set GEMINI_API_KEY environment variable"); sys.exit(1)

model = "gemini-3.1-flash-image-preview"
url = f"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent?key={GEMINI_API_KEY}"

prompt = """A professional photograph of a modern co-working space in
Newcastle, Australia. Natural light floods through floor-to-ceiling
windows. Three people collaborate at a standing desk — one pointing
at a laptop screen. Exposed brick wall, potted fiddle-leaf fig,
coffee cups on the desk. Shot at 35mm f/4.0, environmental portrait
style. No text, no watermarks, no logos."""

payload = json.dumps({
    "contents": [{"parts": [{"text": prompt}]}],
    "generationConfig": {
        "responseModalities": ["TEXT", "IMAGE"],
        "temperature": 0.8
    }
}).encode()

req = urllib.request.Request(url, data=payload, headers={
    "Content-Type": "application/json",
    "User-Agent": "ImageGen/1.0"
})

resp = urllib.request.urlopen(req, timeout=120)
result = json.loads(resp.read())

# Extract image from response
for part in result["candidates"][0]["content"]["parts"]:
    if "inlineData" in part:
        img_data = base64.b64decode(part["inlineData"]["data"])
        output_path = "hero-image.png"
        with open(output_path, "wb") as f:
            f.write(img_data)
        print(f"Saved: {output_path} ({len(img_data):,} bytes)")
        break
PYEOF
GPT Image 1.5 — 透明图标

仅在需要透明 PNG 时使用 gpt-image-1.5。GPT Image 2 不支持透明效果。

python3 << 'PYEOF'
import json, base64, urllib.request, os, sys

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
if not OPENAI_API_KEY:
    print("Set OPENAI_API_KEY environment variable"); sys.exit(1)

url = "https://api.openai.com/v1/images/generations"

payload = json.dumps({
    "model": "gpt-image-1.5",
    "prompt": "A minimal, clean plumbing wrench icon. Flat design, single consistent stroke weight, modern style. On a transparent background.",
    "n": 1,
    "size": "1024x1024",
    "background": "transparent",
    "output_format": "png"
}).encode()

req = urllib.request.Request(url, data=payload, headers={
    "Content-Type": "application/json",
    "Authorization": f"Bearer {OPENAI_API_KEY}"
})

resp = urllib.request.urlopen(req, timeout=120)
result = json.loads(resp.read())

img_data = base64.b64decode(result["data"][0]["b64_json"])
with open("icon-wrench.png", "wb") as f:
    f.write(img_data)
print(f"Saved: icon-wrench.png ({len(img_data):,} bytes)")
PYEOF
GPT Image 2 — 文字密集型内容或批量变体

需要清晰呈现文字,或想在一次调用中生成 10 个变体时,请使用 gpt-image-2。不支持透明效果——如果需要透明背景,请使用上面的 1.5。

python3 << 'PYEOF'
import json, base64, urllib.request, os, sys, pathlib

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
if not OPENAI_API_KEY:
    print("Set OPENAI_API_KEY environment variable"); sys.exit(1)

url = "https://api.openai.com/v1/images/generations"

# 10-variation batch of a pricing card with rendered text
payload = json.dumps({
    "model": "gpt-image-2",
    "prompt": (
        "A modern pricing card for a web hosting plan. "
        "Headline 'Starter' in bold sans-serif. "
        "Price '$29/month' directly below in large type. "
        "Three feature lines: 'Unlimited bandwidth', 'SSD storage', 'Free SSL'. "
        "Clean flat design, soft drop shadow, deep blue accent colour. "
        "White card on light grey background."
    ),
    "n": 10,
    "size": "1024x1024",
    "quality": "medium",
    "output_format": "png"
}).encode()

req = urllib.request.Request(url, data=payload, headers={
    "Content-Type": "application/json",
    "Authorization": f"Bearer {OPENAI_API_KEY}"
})

# Timeout: up to 2 min for complex prompts
resp = urllib.request.urlopen(req, timeout=180)
result = json.loads(resp.read())

pathlib.Path("variations").mkdir(exist_ok=True)
for i, item in enumerate(result["data"], 1):
    img_data = base64.b64decode(item["b64_json"])
    path = f"variations/pricing-card-{i:02d}.png"
    with open(path, "wb") as f:
        f.write(img_data)
    print(f"Saved: {path} ({len(img_data):,} bytes)")

print(f"\nGenerated {len(result['data'])} variants. Pick the best; delete the rest.")
PYEOF

批量工作流:生成 10 个 → 并排审阅 → 选出 1–2 个 → 可选:针对胜出方向使用更严格的提示词重新生成。比单次生成后再迭代更快。

4. 保存并优化

将生成的图像保存到 .jez/artifacts/ 或用户指定的路径。

后期处理(可选):

# Convert to WebP for web use
python3 -c "
from PIL import Image
img = Image.open('hero-image.png')
img.save('hero-image.webp', 'WEBP', quality=85)
print(f'WebP: {img.size[0]}x{img.size[1]}')
"

# Trim whitespace from transparent icons
python3 -c "
from PIL import Image
img = Image.open('icon.png')
trimmed = img.crop(img.getbbox())
trimmed.save('icon-trimmed.png')
"
5. 质量检查(可选)

将生成的图像发送给视觉模型进行 QA:

# Send to Gemini Flash for critique
critique_prompt = """Review this image for:
1. AI artifacts (extra fingers, floating objects, text errors)
2. Technical accuracy (wrong equipment, unsafe positioning)
3. Composition issues (awkward cropping, cluttered background)
4. Style consistency with a professional stock photo

List any issues found, or say 'PASS' if the image is production-ready."""

如果发现问题,请将其作为反向指导补充到原始提示词中,然后重新生成。

多轮编辑

Gemini 支持在多轮对话中编辑已生成的图像。关键要求:保留模型响应中的 thought signatures。

# Turn 1: Generate base image
contents = [{"role": "user", "parts": [{"text": "Scene prompt..."}]}]

# The response includes thoughtSignature on parts — preserve them ALL

# Turn 2: Edit the image
contents = [
    {"role": "user", "parts": [{"text": "Original prompt"}]},
    {"role": "model", "parts": response_parts_with_signatures},  # Keep intact
    {"role": "user", "parts": [{"text": "Edit: change the wall colour to blue. Keep everything else exactly the same."}]}
]

编辑提示词模式:始终明确说明要保持不变的内容,而不只是说明要修改什么。未列出的元素都可以由模型自由修改。

GOOD: "Edit this image: keep the people, desk, and window unchanged.
Only change: wall colour from terracotta to ocean blue."

BAD: "Now make the wall blue."
(Model may change everything else too)

API 密钥设置

提供商获取密钥环境变量
Google Geminiaistudio.google.comGEMINI_API_KEY
OpenAIplatform.openai.comOPENAI_API_KEY
export GEMINI_API_KEY="your-key-here"
export OPENAI_API_KEY="your-key-here"

常见错误

错误修正方法
用 curl 编写 Gemini 提示词使用 Python — shell 转义会在撇号处出错
使用“美观、专业、高质量”之类的描述使用具体规格:“85mm f/1.8,黄金时段光线”
未说明要排除的内容始终以“No text, no watermarks, no logos”结尾
要求 Gemini 生成透明 PNGGemini 不支持透明背景 — 使用 GPT Image 1.5,并设置 background: "transparent"
要求 GPT Image 2 生成透明 PNGGPT Image 2 不支持透明背景 — 仅在此情况下改用 gpt-image-1.5
使用 GPT Image 1.5 在图像中生成文字GPT Image 1.5 的文字渲染不可靠 — 任何需要清晰可读文字的场景都使用 gpt-image-2
阻塞等待 GPT Image 2 的请求复杂提示词的生成最多可能需要 2 min — 使用 180s 超时,并构建异步 UX
为澳大利亚企业使用美国默认设置明确指定“Australian”以及当地的建筑和植被
使用通用数据填写模型 ID核实当前模型 ID — 它们经常变化

评论

支持 Markdown