import requests
import time
import json
from PIL import Image
from io import BytesIO
class mcQwenImage:
def init(self, api_key, base_url='https://api-inference.modelscope.cn/'):
self.base_url = base_url
self.api_key = api_key
self.common_headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
}
def generate_image(self, prompt, image_url, model='Qwen/Qwen-Image-Edit-2511', loras=None):"""调用图像生成 API参数:- prompt: 图像生成提示词- image_url: 输入图像 URL 列表- model: 使用的模型 ID,默认为 'Qwen/Qwen-Image-Edit-2511'- loras: LoRA 配置,可选返回:- task_id: 生成任务 ID"""payload = {"model": model,"prompt": prompt,"image_url": image_url}if loras:payload["loras"] = lorasresponse = requests.post(f"{self.base_url}v1/images/generations",headers={**self.common_headers, "X-ModelScope-Async-Mode": "true"},data=json.dumps(payload, ensure_ascii=False).encode('utf-8'))response.raise_for_status()return response.json()["task_id"]def get_task_status(self, task_id):"""查询任务状态参数:- task_id: 任务 ID返回:- 完整的任务状态响应"""result = requests.get(f"{self.base_url}v1/tasks/{task_id}",headers={**self.common_headers, "X-ModelScope-Task-Type": "image_generation"},)result.raise_for_status()return result.json()def wait_for_result(self, task_id, poll_interval=5):"""等待任务完成并返回结果参数:- task_id: 任务 ID- poll_interval: 查询间隔(秒),默认为 5 秒返回:- 生成的图像对象(PIL.Image)"""while True:data = self.get_task_status(task_id)if data["task_status"] == "SUCCEED":image_response = requests.get(data["output_images"][0])image = Image.open(BytesIO(image_response.content))return imageelif data["task_status"] == "FAILED":raise Exception("Image Generation Failed.")time.sleep(poll_interval)def generate_and_get_image(self, prompt, image_url, model='Qwen/Qwen-Image-Edit-2511', loras=None, poll_interval=5):"""完整的图像生成流程:调用 API -> 等待结果 -> 返回图像参数:- prompt: 图像生成提示词- image_url: 输入图像 URL 列表- model: 使用的模型 ID- loras: LoRA 配置,可选- poll_interval: 查询间隔(秒)返回:- 生成的图像对象(PIL.Image)"""task_id = self.generate_image(prompt, image_url, model, loras)return self.wait_for_result(task_id, poll_interval)
示例用法
if name == "main":
# 替换为你的 ModelScope Token
api_key = '换成你自己的 apikey'
# 创建实例
qwen_image = mcQwenImage(api_key)picform = "十二宫格组成"
pictile = "3x4"
style = "二次元动漫风格"
picsize = "1024x1024"
description = f"""
第一张图,
"""# 生成图像
prompt = f"""
这是一幅由{picform}的{pictile}的{sytle}风格作品,图片尺寸为{picsize},
{description}
"""
image_url = ["https://modelscope.oss-cn-beijing.aliyuncs.com/Dog.png"] # 找可以上传图像的urltry:image = qwen_image.generate_and_get_image(prompt, image_url)image.save("result_image.jpg")print("图像生成成功,已保存为 result_image.jpg")
except Exception as e:print(f"图像生成失败: {e}")
