python+千问大模型api实现ai电商图片详情图多图生成管理系统bfwshophoter代码
代码语言:python
所属分类:其他
代码描述:python+千问大模型api实现ai电商图片详情图多图生成管理系统bfwshophoter代码,上传一张商品图片,选择平台和风格,ai自动生成所有详情页的各种场景图。
代码标签: python 千问 大模型 api ai 电商 图片 详情图 多图 生成 管理 系统 bfwshop
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AI电商商品多图矩阵生成系统bfwshophoter多项目管理 + 丰富场景矩阵
"""
import os
import json
import uuid
import base64
import urllib.request
import urllib.error
from datetime import datetime
from pathlib import Path
from flask import Flask, request, jsonify, send_from_directory
# ============================================================
# 配置
# ============================================================
DASHSCOPE_API_KEY = os.environ.get("DASHSCOPE_API_KEY", "sk-")
WORK_DIR = Path("ecom_multigenerator_workspace")
WORK_DIR.mkdir(exist_ok=True)
PROJECTS_FILE = WORK_DIR / "projects.json"
app = Flask(__name__)
# ============================================================
# 图片类型定义
# ============================================================
IMAGE_TYPES = {
"cover": {"icon": "🖼️", "name": "纯净白底主图", "desc": "干净无杂物,打光完美,适合商品链接第一张主图,直接提升点击率"},
"poster": {"icon": "🎨", "name": "卖点排版海报图", "desc": "AI智能构图偏向一侧,留出大面积空白区域,方便后期添加文字卖点"},
"lifestyle":{"icon": "🛋️", "name": "真实生活场景图", "desc": "将商品自然融入桌面、茶几、户外等真实场景,增加代入感和可信度"},
"model": {"icon": "💃", "name": "模特互动手持图", "desc": "无需请外模,AI自动生成匹配气质的模特佩戴/手持展示,体现使用状态"},
"detail": {"icon": "🔍", "name": "极致材质微距特写", "desc": "模拟微距镜头,放大展示纹理、皮革、金属件等高品质做工细节"},
"banner": {"icon": "📢", "name": "促销活动Banner图", "desc": "横版宽幅构图,视觉冲击力强,留出文字排版空间,适合促销活动使用"},
"flatlay": {"icon": "📐", "name": "创意Flat-Lay俯拍", "desc": "从正上方俯拍,搭配相关道具精心摆拍,营造高级杂志感视觉效果"},
"gift": {"icon": "🎁", "name": "礼盒送礼场景图", "desc": "营造节日送礼氛围,精美包装搭配温馨场景,刺激礼赠消费需求"},
}
# ============================================================
# 辅助工具
# ============================================================
def _get_resolution(aspect_ratio):
mapping = {
"1:1": "1024*1024", "3:4": "768*1024", "4:3": "1024*768",
"9:16": "720*1280", "16:9": "1280*720"
}
return mapping.get(aspect_ratio, "1024*1024")
def get_base64_image_uri(local_filepath: Path) -> str:
with open(local_filepath, "rb") as f:
b64_data = base64.b64encode(f.read()).decode("utf-8")
ext = local_filepath.suffix.lower().replace(".", "")
if ext in ["jpg", "jpeg"]: ext = "jpeg"
elif ext == "webp": ext = "webp"
else: ext = "png"
return f"data:image/{ext};base64,{b64_data}"
def _create_placeholder_image(path, text="生成中...", width=1024, height=1024):
try:
from PIL import Image, ImageDraw, ImageFont
img = Image.new('RGB', (width, height), color=(30, 30, 45))
draw = ImageDraw.Draw(img)
draw.text((width//2 - 60, height//2), text, fill=(200, 200, 220))
img.save(str(path), "PNG")
except:
with open(str(path), 'wb') as f:
f.write(b'\x89PNG\r\n\x1a\n')
# ============================================================
# DashScope API
# ============================================================
def dashscope_multimodal_image(image_b64, prompt, size="1024*1024"):
payload = {
"model": "qwen-image-2.0-pro",
"input": {
"messages": [{
"role": "user",
"content": [
{"image": image_b64},
{"text": prompt}
]
}]
},
"parameters": {"n": 1, "prompt_extend": True, "size": size}
}
try:
req = urllib.request.Request(
"https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation",
data=json.dumps(payload).encode('utf-8'),
headers={
"Authorization": f"Bearer {DASHSCOPE_API_KEY}",
"Content-Type": "application/json"
},
method="POST"
)
with urllib.request.urlopen(req, timeout=120) as response:
result = json.loads(response.read().decode('utf-8'))
choices = result.get("output", {}).get("choices", [])
if choices:
for item in choices[0].get("message", {}).get("content", []):
if "image" in item:
return item["image"]
except Exception as e:
print(f"DashScope API Error: {e}")
return None
# ============================================================
# 数据管理
# ============================================================
projects = {}
def load_data():
global projects
if PROJECTS_FILE.exists():
try:
with open(PROJECTS_FILE, "r", encoding="utf-8") as f:
projects = json.load(f)
except:
pass
def save_projects():
with open(PROJECTS_FILE, "w", encoding="utf-8") as f:
json.dump(projects, f, ensure_ascii=False, indent=2)
def get_project_dir(pid):
d = WORK_DIR / pid
d.mkdir(exist_ok=True)
return d
def make_new_project(pid):
return {
"id": pid,
"product_name": "",
"platform": "taobao",
"aspect_ratio": "1:1",
"selling_points": "",
.........完整代码请登录后点击上方下载按钮下载查看















网友评论0