【PythonAI】4.3.2 技能实训:使用无代码AI工具生成活动海报、插图

【PythonAI】4.3.2 技能实训:使用无代码AI工具生成活动海报、插图
# tongyi_image_generator.pyimportdashscopeimportrequestsimportbase64fromPILimportImagefromioimportBytesIOimportosclassAIImageGenerator:def__init__(self,api_key): 初始化图片生成器 :param api_key: 阿里云DashScope API密钥 self.api_keyapi_key dashscope.api_keyapi_keydefgenerate_poster_image(self,prompt,size1024*1024,n1): 使用通义万相生成海报图片 :param prompt: 图片描述提示词 :param size: 图片尺寸可选512*512, 1024*1024, 1024*768, 768*1024等 :param n: 生成图片数量 :return: 图片URL列表或None try:# 使用dashscope的image_synthesis模块fromdashscopeimportImageSynthesis# 构建增强的提示词enhanced_promptf高质量海报设计{prompt}专业平面设计色彩鲜艳适合印刷negative_prompt模糊低质量文字错误变形构图混乱# 调用通义万相APIresponseImageSynthesis.call(modelwanx-v1,promptenhanced_prompt,negative_promptnegative_prompt,sizesize,nn)# 检查响应状态ifresponse.status_code200:resultsresponse.output.results image_urls[result.urlforresultinresults]print(f✓ 成功生成{len(image_urls)}张图片)returnimage_urlselse:print(f✗ 生成失败:{response.code}-{response.message})returnNoneexceptExceptionase:print(f✗ 生成过程中发生异常:{e})returnNonedefgenerate_poster_image_http(self,prompt,size1024*1024): 使用HTTP请求方式生成图片备用方案 :param prompt: 图片描述提示词 :param size: 图片尺寸 :return: 图片URL或None urlhttps://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesisheaders{Authorization:fBearer{self.api_key},Content-Type:application/json}enhanced_promptf高质量海报设计{prompt}专业平面设计色彩鲜艳适合印刷payload{model:wanx-v1,input:{prompt:enhanced_prompt,negative_prompt:模糊低质量文字错误变形构图混乱},parameters:{size:size,n:1}}try:responserequests.post(url,headersheaders,jsonpayload,timeout30)resultresponse.json()# 检查响应ifresponse.status_code200andoutputinresult:ifresultsinresult[output]andlen(result[output][results])0:image_urlresult[output][results][0][url]print(f✓ 成功生成图片)returnimage_urlelse:print(f✗ 响应中没有图片信息)returnNoneelse:print(f✗ API调用失败:{result})returnNoneexceptrequests.exceptions.RequestExceptionase:print(f✗ 网络请求异常:{e})returnNoneexceptExceptionase:print(f✗ 其他异常:{e})returnNonedefsave_image_from_url(self,image_url,filename,save_dirgenerated_images): 从URL保存图片 :param image_url: 图片URL :param filename: 文件名 :param save_dir: 保存目录 try:# 创建保存目录ifnotos.path.exists(save_dir):os.makedirs(save_dir)# 完整文件路径filepathos.path.join(save_dir,filename)# 下载图片responserequests.get(image_url,timeout30)response.raise_for_status()# 打开并保存图片imgImage.open(BytesIO(response.content))img.save(filepath)print(f✓ 图片已保存:{filepath})returnfilepathexceptrequests.exceptions.RequestExceptionase:print(f✗ 下载图片失败:{e})returnNoneexceptExceptionase:print(f✗ 保存图片失败:{e})returnNonedefsave_image_from_base64(self,base64_data,filename,save_dirgenerated_images): 从base64数据保存图片 :param base64_data: base64编码的图片数据 :param filename: 文件名 :param save_dir: 保存目录 try:# 创建保存目录ifnotos.path.exists(save_dir):os.makedirs(save_dir)# 完整文件路径filepathos.path.join(save_dir,filename)# 解码base64并保存image_database64.b64decode(base64_data)imgImage.open(BytesIO(image_data))img.save(filepath)print(f✓ 图片已保存:{filepath})returnfilepathexceptExceptionase:print(f✗ 保存base64图片失败:{e})returnNone# 海报生成示例defcreate_event_poster():创建民族团结活动海报# 初始化生成器请替换为您的实际API Keyapi_keyyour-deepseek-api-key-heregeneratorAIImageGenerator(api_key)# 定义多个海报风格的提示词poster_prompts[{name:民族团结活动海报_主视觉,prompt: 新疆风格校园活动海报民族团结主题 各族大学生手拉手跳舞穿着中华民族传统服饰 背景有天山山脉和现代建筑元素 色彩温暖明亮有杏花飘落的场景 现代插画风格画面充满活力和欢乐氛围 },{name:民族团结活动海报_文字版,prompt: 民族团结主题海报包含民族团结一家亲艺术字体设计 各族学生一起学习交流的场景 背景有现代特色建筑和自然风光 色彩和谐温馨具有浓郁的中华民族特色 }]# 生成并保存海报forposterinposter_prompts:print(f\n正在生成:{poster[name]})# 方法1使用dashscope SDK推荐image_urlsgenerator.generate_poster_image(poster[prompt],size1024*1024)ifimage_urls:# 保存第一张生成的图片generator.save_image_from_url(image_urls[0],f{poster[name]}.png)else:print(f✗ 使用SDK生成失败尝试HTTP方式...)# 方法2使用HTTP请求备用image_urlgenerator.generate_poster_image_http(poster[prompt])ifimage_url:generator.save_image_from_url(image_url,f{poster[name]}_http.png)else:print(f✗ 两种方式均生成失败)defcreate_custom_poster():创建自定义海报api_keyyour-deepseek-api-key-heregeneratorAIImageGenerator(api_key)# 自定义提示词custom_promptinput(请输入海报描述按Enter使用默认描述: ).strip()ifnotcustom_prompt:custom_prompt 现代教育主题海报学生们在科技感十足的教室里学习 AI辅助教学场景未来科技风格 蓝色和白色为主色调明亮清新 print(f\n生成提示词:{custom_prompt})# 生成图片image_urlsgenerator.generate_poster_image(custom_prompt,size1024*1024)ifimage_urls:# 保存图片filenamecustom_poster.pnggenerator.save_image_from_url(image_urls[0],filename)print(f\n✓ 海报生成完成)print(f 保存位置: generated_images/{filename})else:print(\n✗ 海报生成失败请检查API密钥和网络连接)if__name____main__:print(*50)print(通义万相海报生成器)print(*50)whileTrue:print(\n请选择功能:)print(1. 生成民族团结活动海报)print(2. 生成自定义海报)print(3. 退出)choiceinput(请输入选择 (1/2/3): ).strip()ifchoice1:create_event_poster()elifchoice2:create_custom_poster()elifchoice3:print(感谢使用再见)breakelse:print(无效选择请重新输入)运行结果(ai_env)$ python3 tongyi_image_generator.py 通义万相海报生成器 请选择功能: 1.生成民族团结活动海报 2.生成自定义海报 3.退出 请输入选择(1/2/3): 1 正在生成: 民族团结活动海报_主视觉 ✓ 成功生成 1 张图片 ✓ 图片已保存: generated_images/民族团结活动海报_主视觉.png 正在生成: 民族团结活动海报_文字版 ✓ 成功生成 1 张图片 ✓ 图片已保存: generated_images/民族团结活动海报_文字版.png 请选择功能: 1.生成民族团结活动海报 2.生成自定义海报 3.退出 请输入选择(1/2/3): 3 感谢使用再见(ai_env)$