使用 Sora 官网逆向技术编辑和改造现有图片,按次计费仅需 $0.01/张
功能 | Sora Image 编辑 | 传统图片编辑 API | DALL·E 2 编辑 |
---|---|---|---|
价格 | $0.01/张 | $0.02-0.05/张 | $0.018/张 |
中文支持 | ✅ 原生支持 | ❌ 需翻译 | ❌ 需翻译 |
多图输入 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
响应速度 | 快速 | 中等 | 较慢 |
import requests
import re
# API 配置
API_KEY = "YOUR_API_KEY"
API_URL = "https://api.apiyi.com/v1/chat/completions"
def edit_image(image_url, prompt, model="gpt-4o-image"):
"""
编辑单张图片
Args:
image_url: 原图片 URL
prompt: 编辑描述
model: 使用的模型,可选 "gpt-4o-image" 或 "sora_image"
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 构建包含图片的消息
content = [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": {"url": image_url}}
]
payload = {
"model": model,
"messages": [{"role": "user", "content": content}]
}
response = requests.post(API_URL, headers=headers, json=payload)
result = response.json()
# 提取编辑后的图片 URL
content = result['choices'][0]['message']['content']
edited_urls = re.findall(r'!\[.*?\]\((https?://[^)]+)\)', content)
return edited_urls[0] if edited_urls else None
# 使用示例
original_url = "https://example.com/cat.jpg"
edited_url = edit_image(original_url, "把猫咪的毛色改成彩虹色")
print(f"编辑后的图片: {edited_url}")
def merge_images(image_urls, prompt, model="gpt-4o-image"):
"""
融合多张图片
Args:
image_urls: 图片 URL 列表
prompt: 融合描述
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 构建包含多张图片的消息
content = [{"type": "text", "text": prompt}]
for url in image_urls:
content.append({
"type": "image_url",
"image_url": {"url": url}
})
payload = {
"model": model,
"messages": [{"role": "user", "content": content}]
}
response = requests.post(API_URL, headers=headers, json=payload)
result = response.json()
# 提取结果
content = result['choices'][0]['message']['content']
merged_urls = re.findall(r'!\[.*?\]\((https?://[^)]+)\)', content)
return merged_urls
# 融合示例
urls = [
"https://example.com/landscape1.jpg",
"https://example.com/landscape2.jpg"
]
merged = merge_images(urls, "将两张风景图融合成一张全景图")
# 风格转换模板
style_templates = {
"卡通": "转换成迪士尼卡通风格,色彩鲜艳",
"油画": "转换成古典油画风格,如梵高的画风",
"水墨": "转换成中国水墨画风格,留白意境",
"赛博朋克": "转换成赛博朋克风格,霓虹灯光效果",
"素描": "转换成铅笔素描风格,黑白线条"
}
def apply_style(image_url, style_name):
"""应用预设风格"""
if style_name in style_templates:
prompt = style_templates[style_name]
return edit_image(image_url, prompt)
else:
return None
# 批量风格转换
original = "https://example.com/portrait.jpg"
for style in ["卡通", "油画", "水墨"]:
result = apply_style(original, style)
print(f"{style}风格: {result}")
def change_background(image_url, new_background):
"""更换图片背景"""
prompts = {
"海滩": "保留主体,背景更换为阳光海滩,椰子树和蓝天",
"办公室": "保留人物,背景更换为现代化办公室",
"太空": "保留主体,背景更换为浩瀚星空",
"纯色": "去除背景,更换为纯白色背景"
}
prompt = prompts.get(new_background, f"更换背景为{new_background}")
return edit_image(image_url, prompt)
# 使用示例
new_photo = change_background(
"https://example.com/person.jpg",
"海滩"
)
def edit_objects(image_url, action, target, details=""):
"""编辑图片中的特定物体"""
action_prompts = {
"添加": f"在图片中添加{target},{details}",
"删除": f"删除图片中的{target},自然填充背景",
"替换": f"将图片中的{target}替换为{details}",
"修改": f"修改图片中的{target},{details}"
}
prompt = action_prompts.get(action, "")
return edit_image(image_url, prompt)
# 编辑示例
# 添加物体
result1 = edit_objects(
"https://example.com/room.jpg",
"添加", "一只猫", "坐在沙发上"
)
# 删除物体
result2 = edit_objects(
"https://example.com/street.jpg",
"删除", "电线杆"
)
# 替换物体
result3 = edit_objects(
"https://example.com/table.jpg",
"替换", "苹果", "橙子"
)
def adjust_image(image_url, adjustments):
"""调整图片的颜色和光线"""
prompt_parts = []
if "brightness" in adjustments:
prompt_parts.append(f"亮度调整为{adjustments['brightness']}")
if "color_tone" in adjustments:
prompt_parts.append(f"色调调整为{adjustments['color_tone']}")
if "time" in adjustments:
prompt_parts.append(f"光线调整为{adjustments['time']}的效果")
if "season" in adjustments:
prompt_parts.append(f"季节感调整为{adjustments['season']}")
prompt = ",".join(prompt_parts)
return edit_image(image_url, prompt)
# 调整示例
adjusted = adjust_image(
"https://example.com/landscape.jpg",
{
"brightness": "明亮",
"color_tone": "暖色调",
"time": "黄金时刻",
"season": "秋天"
}
)
import asyncio
import aiohttp
async def edit_image_async(session, image_url, prompt):
"""异步编辑图片"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
content = [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": {"url": image_url}}
]
payload = {
"model": "gpt-4o-image",
"messages": [{"role": "user", "content": content}]
}
async with session.post(API_URL, headers=headers, json=payload) as response:
result = await response.json()
content = result['choices'][0]['message']['content']
urls = re.findall(r'!\[.*?\]\((https?://[^)]+)\)', content)
return urls[0] if urls else None
async def batch_edit(image_urls, prompts):
"""批量编辑多张图片"""
async with aiohttp.ClientSession() as session:
tasks = []
for url, prompt in zip(image_urls, prompts):
task = edit_image_async(session, url, prompt)
tasks.append(task)
results = await asyncio.gather(*tasks)
return results
# 批量处理示例
image_urls = ["url1.jpg", "url2.jpg", "url3.jpg"]
prompts = ["转卡通风格", "添加彩虹", "改为夜景"]
results = asyncio.run(batch_edit(image_urls, prompts))
import json
from datetime import datetime
class EditHistory:
"""图片编辑历史管理"""
def __init__(self, filename="edit_history.json"):
self.filename = filename
self.history = self.load_history()
def load_history(self):
try:
with open(self.filename, 'r') as f:
return json.load(f)
except FileNotFoundError:
return []
def save_edit(self, original_url, edited_url, prompt):
"""保存编辑记录"""
record = {
"timestamp": datetime.now().isoformat(),
"original": original_url,
"edited": edited_url,
"prompt": prompt,
"cost": 0.01
}
self.history.append(record)
with open(self.filename, 'w') as f:
json.dump(self.history, f, indent=2)
def get_total_cost(self):
"""计算总成本"""
return sum(record['cost'] for record in self.history)
# 使用历史管理
history = EditHistory()
# 编辑并记录
original = "https://example.com/photo.jpg"
edited = edit_image(original, "美化照片")
history.save_edit(original, edited, "美化照片")
print(f"总共编辑了 {len(history.history)} 张图片")
print(f"总成本: ${history.get_total_cost():.2f}")
def suggest_edits(image_description):
"""根据图片描述生成编辑建议"""
suggestions = []
# 基于内容的建议
if "人物" in image_description:
suggestions.extend([
"美颜磨皮,自然效果",
"更换专业摄影棚背景",
"调整为专业人像光线"
])
if "风景" in image_description:
suggestions.extend([
"增强色彩饱和度,让风景更生动",
"调整为黄金时刻光线",
"添加梦幻光效"
])
if "产品" in image_description:
suggestions.extend([
"更换为纯白背景",
"增加产品光泽感",
"添加倒影效果"
])
# 通用建议
suggestions.extend([
"转换为油画艺术风格",
"应用复古滤镜效果",
"优化整体色彩平衡"
])
return suggestions
# 获取编辑建议
suggestions = suggest_edits("人物肖像照片")
print("推荐的编辑操作:")
for i, suggestion in enumerate(suggestions[:5], 1):
print(f"{i}. {suggestion}")
编辑类型 | 原图描述 | 编辑指令 | 效果描述 |
---|---|---|---|
风格转换 | 真实照片 | 转换为动漫风格 | 保留构图,日漫画风 |
背景替换 | 室内人像 | 更换为海滩背景 | 自然融合,光线匹配 |
物体编辑 | 桌面场景 | 添加一杯咖啡 | 透视准确,阴影真实 |
多图融合 | 两张风景 | 创建全景图 | 无缝拼接,色调统一 |