Files
qhmes/web-dist/js/AiPainting-DUcOdYda.js
2026-06-16 18:19:57 +08:00

2 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
var T=(A,u,o)=>new Promise((p,n)=>{var f=r=>{try{_(o.next(r))}catch(h){n(h)}},s=r=>{try{_(o.throw(r))}catch(h){n(h)}},_=r=>r.done?p(r.value):Promise.resolve(r.value).then(f,s);_((o=o.apply(A,u)).next())});import{B as G}from"./BasicForm-ClUSoD_-.js";import"./helper-DcLcf4v6.js";import{u as B}from"./useForm-D61zovon.js";import D from"./ImageViewer-DC0qDdlD.js";import{a1 as J,aU as O,T as K,aH as N,d as F,s as R,aX as $,x as I,au as H}from"./index-X7Y8jykP.js";import{e as W,h as Q,o as X,r as P,d as Y,C as g,z as c,Q as a,y as Z,H as v,f as t,A as d,u as b,K as ee,F as le,E as x}from"./vue-vendor-DNhG1Cve.js";const Te=[{field:"drawModelId",label:"模型",component:"JDictSelectTag",required:!0,helpMessage:["1、需要选择在模型中已有的图像模型","2、智普语言模型不支持尺寸设置","3、openAi旧版模型如(dall-e-2)需要选择尺寸,新版模型直接输入'竖版: 9:16即可'","4、当前只有千问万象模型(wanx2.1-imageedit,wan2.5-i2i-preview)支持图生图","5、wan2.5-i2i-preview支持多张图片","6、当前文生图openAi效果最佳"],componentProps:{dictCode:"airag_model where model_type = 'IMAGE' and activate_flag = 1,name,id"}},{field:"content",label:"提示词",component:"InputTextArea",required:!0,componentProps:{rows:10,placeholder:"请输入提示词,例如:一只可爱的猫咪,赛博朋克风格"}},{field:"imageUrl",label:"参考图",component:"JImageUpload",componentProps:{fileMax:2}},{field:"imageSize",label:"图片尺寸",component:"Select",defaultValue:"720*1280",componentProps:{options:[{label:"1:1 (1024x1024)",value:"1024*1024"},{label:"16:9 (1280x720)",value:"1280*720"},{label:"9:16 (720x1280)",value:"720*1280"},{label:"4:3 (1024x768)",value:"1024*768"},{label:"3:4 (768x1024)",value:"768*1024"}]}}],ae=[{field:"drawModelId",label:"模型",component:"JDictSelectTag",required:!0,helpMessage:["1、需要选择在模型中已有的图像模型","2、当前支持通义万象模型wan2.5-i2i-preview"],componentProps:{dictCode:"airag_model where model_type = 'IMAGE' and activate_flag = 1,name,id"}},{field:"imageSize",label:"尺寸",component:"Select",defaultValue:"720*1280",componentProps:{options:[{label:"1:1 (1024x1024)",value:"1024*1024"},{label:"16:9 (1280x720)",value:"1280*720"},{label:"9:16 (720x1280)",value:"720*1280"},{label:"4:3 (1024x768)",value:"1024*768"},{label:"3:4 (768x1024)",value:"768*1024"}]}},{field:"imageUrl",label:"上传图像",component:"JImageUpload",required:!0,componentProps:{fileMax:3,text:"上传图像"},rules:[{required:!0,validator:(A,u)=>T(null,null,function*(){return u?u.split(",").length<2?Promise.reject("合成至少2张图片"):Promise.resolve():Promise.reject("请上传图像")})}]},{field:"content",label:"提示词",component:"InputTextArea",componentProps:{rows:4,placeholder:"如将图一的话花瓶放到图二中"}}],M=[{field:"drawModelId",label:"模型",component:"JDictSelectTag",required:!0,helpMessage:["1、需要选择在模型中已有的图像模型","2、智普语言模型不支持尺寸设置","3、openAi旧版模型如(dall-e-2)需要选择尺寸,新版模型直接输入'竖版: 9:16即可'","4、当前只有千问万象模型(wanx2.1-imageedit,wan2.5-i2i-preview)支持图生图","5、wan2.5-i2i-preview支持多张图片","6、当前文生图openAi效果最佳"],componentProps:{dictCode:"airag_model where model_type = 'IMAGE' and activate_flag = 1,name,id"}},{field:"content",label:"提示词",component:"InputTextArea",required:!0,componentProps:{rows:5,placeholder:"请输入提示词,例如:一只可爱的猫咪"}},{field:"imageSize",label:"图片尺寸",component:"Select",defaultValue:"720*1280",componentProps:{options:[{label:"1:1 (1024x1024)",value:"1024*1024"},{label:"16:9 (1280x720)",value:"1280*720"},{label:"9:16 (720x1280)",value:"720*1280"},{label:"4:3 (1024x768)",value:"1024*768"},{label:"3:4 (768x1024)",value:"768*1024"}]}},{field:"style",label:"风格",component:"Select",defaultValue:"modernOrganic",componentProps:{options:[{label:"赛博朋克",value:"cyberpunk"},{label:"星际",value:"star"},{label:"动漫",value:"anime"},{label:"日本漫画",value:"japaneseComicsManga"},{label:"水墨画风格",value:"inkWashPaintingStyle"},{label:"原创",value:"original"},{label:"风景画",value:"landscape"},{label:"插画",value:"illustration"},{label:"漫画",value:"manga"},{label:"现代自然",value:"modernOrganic"},{label:"创世纪",value:"genesis"},{label:"海报风格",value:"posterstyle"},{label:"超现实主义",value:"surrealism"},{label:"素描",value:"sketch"},{label:"写实",value:"realism"},{label:"水彩画",value:"watercolorPainting"},{label:"立体主义",value:"cubism"},{label:"黑白",value:"blackAndWhite"},{label:"胶片摄影风格",value:"fmPhotography"},{label:"电影化",value:"cinematic"},{label:"清晰的面部特征",value:"clearFacialFeatures"}]}},{field:"visualAngle",label:"视角",component:"Select",defaultValue:"frontView",componentProps:{options:[{label:"宽视角",value:"wideView"},{label:"鸟瞰视角",value:"birdView"},{label:"顶视角",value:"topView"},{label:"仰视角",value:"upview"},{label:"正面视角",value:"frontView"},{label:"头部特写",value:"headshot"},{label:"超广角视角",value:"ultrawideshot"},{label:"中景",value:"mediumShot"},{label:"远景",value:"longShot"},{label:"景深",value:"depthOfField"}]}},{field:"characterShot",label:"人物镜头",component:"Select",defaultValue:"fullLengthShot",componentProps:{options:[{label:"脸部特写",value:"faceShot"},{label:"大特写",value:"bigCloseUp"},{label:"特写",value:"closeUp"},{label:"腰部以上",value:"waistShot"},{label:"膝盖以上",value:"kneeShot"},{label:"全身照",value:"fullLengthShot"},{label:"极远景",value:"extraLongShot"}]}},{field:"lighting",label:"灯光",component:"Select",defaultValue:"naturalLight",componentProps:{options:[{label:"冷光",value:"coldLight"},{label:"暖光",value:"warmLight"},{label:"硬光",value:"hardLighting"},{label:"戏剧性光线",value:"dramaticLight"},{label:"反射光",value:"reflectionLight"},{label:"薄雾",value:"mistyFoggy"},{label:"自然光",value:"naturalLight"},{label:"阳光",value:"sunLight"},{label:"情绪化",value:"moody"}]}}],te=[{field:"drawModelId",label:"模型",component:"JDictSelectTag",required:!0,helpMessage:["1、需要选择在模型中已有的图像模型","2、当前只支持通义万象模型(wan2.5-i2i-preview)"],componentProps:{dictCode:"airag_model where model_type = 'IMAGE' and activate_flag = 1,name,id"}},{field:"sourceImage",label:"你的头像",component:"JImageUpload",required:!0,componentProps:{fileMax:1,text:"上传头像"}},{field:"targetImage",label:"明星图",component:"JImageUpload",required:!0,componentProps:{fileMax:1,text:"上传明星图"}},{field:"imageSize",label:"图片尺寸",component:"Select",defaultValue:"720*1280",componentProps:{options:[{label:"1:1 (1024x1024)",value:"1024*1024"},{label:"16:9 (1280x720)",value:"1280*720"},{label:"9:16 (720x1280)",value:"720*1280"},{label:"4:3 (1024x768)",value:"1024*768"},{label:"3:4 (768x1024)",value:"768*1024"}]}}],oe={class:"content-wrapper"},ne={class:"config-panel"},ie={class:"config-tabs"},se={key:0,class:"example-buttons"},re={class:"form-container"},ue={key:0,class:"instructions"},ce={key:1,class:"instructions"},de={class:"action-container"},pe={class:"preview-panel"},me={class:"preview-content"},ge={key:0,class:"empty-state"},ve={key:1,class:"loading-state"},be={key:2,class:"result-image-wrapper group"},fe=["src"],_e={class:"image-actions"},k="ai_painting_task_id",he=W({__name:"AiPainting",setup(A){const{createMessage:u}=R(),o=P(!1);let p=null;const n=P(""),f=P(!1),s=P("draw"),{domainUrl:_}=J(),[r,{validate:h,resetSchema:y,setFieldsValue:V}]=B({schemas:M,labelWidth:100,actionColOptions:{span:24},showActionButtonGroup:!1});Q(s,l=>{y(l==="draw"?M:l==="face"?te:l==="mix"?ae:M)});function U(l){const e=()=>{F.get({url:`/airag/chat/getAiPosterResult/${l}`},{isTransformResponse:!1}).then(i=>{if(i.success)if(i.result==="pending"||i.result===null)p=setTimeout(e,3e3);else{let w=i.result;const m=/#\s*{\s*domainURL\s*}/g;w=w.replace(m,_+"/sys/common/static"),n.value=w,o.value=!1,localStorage.removeItem(k),u.success("图片生成成功")}else o.value=!1,localStorage.removeItem(k),u.warning(i.message||"图片生成失败")}).catch(()=>{p=setTimeout(e,3e3)})};e()}X(()=>{const l=localStorage.getItem(k);l&&(o.value=!0,n.value="",U(l))}),Y(()=>{p&&(clearTimeout(p),p=null)});function L(){return T(this,null,function*(){try{const l=yield h();o.value=!0,n.value="",l.type=s.value,s.value==="face"&&(l.sourceImage&&l.targetImage&&(l.imageUrl=l.sourceImage+","+l.targetImage,delete l.sourceImage,delete l.targetImage),l.content="将图1的面部特征替换到图2的面部区域保留图1五官细节保持图2身体姿态面部融合自然高分辨率写实风格");const e=yield F.post({url:"/airag/chat/genAiPosterAsync",params:l},{isTransformResponse:!1});if(e.success&&e.result){const i=e.result;localStorage.setItem(k,i),U(i)}else o.value=!1,u.warning("提交任务失败")}catch(l){o.value=!1}})}function z(){f.value=!0}function C(l){l==="work_card"?V({imageUrl:"https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/afdad9ea-077f-44a4-9d85-c26cde7aceed_1770703400282.png,https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/4e4d1886-fb3b-4c01-abf6-25e546a1253e_1770703403479.png",content:"以[图1]名片设计稿的构图与磨砂玻璃质感为模板,为[图2]人物生成竖版工作卡。圆角半透明卡面,柔和高光与浅投影;人物胸像置于中上区域;左下排版姓名/职位/公司/电话,极简无衬线字体,留白均衡。右上角放置[图1]人物的可爱3D卡通形象打破边界半浮出卡片并投下轻影形成层次与视觉焦点。整体明亮自然光、真实材质细节不添加多余图案与元素。人物需要清晰不要模糊。"}):l==="change_clothes"&&V({imageUrl:"https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/4e4d1886-fb3b-4c01-abf6-25e546a1253e_1770703403479.png,https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/63706787-4072-4cba-ad88-385e0584b020_1770703456766.png",content:"将【图一】的衣服换到【图二】中。"})}function q(){if(!n.value)return;const l=document.createElement("a");l.href=n.value,l.download=`ai-painting-${Date.now()}.jpg`,l.target="_blank",l.click()}return(l,e)=>{const i=$,w=O,m=ee("a-button"),j=K,E=N;return c(),g(le,null,[a("div",oe,[a("div",ne,[a("div",ie,[t(w,{activeKey:s.value,"onUpdate:activeKey":e[0]||(e[0]=S=>s.value=S),tabBarStyle:{margin:0}},{default:d(()=>[t(i,{key:"draw",tab:"绘图"}),t(i,{key:"face",tab:"换脸"}),t(i,{key:"mix",tab:"混图"})]),_:1},8,["activeKey"])]),s.value==="mix"?(c(),g("div",se,[t(j,{title:"工作证制作"},{default:d(()=>[t(m,{class:"example-btn",size:"small",onClick:e[1]||(e[1]=S=>C("work_card"))},{default:d(()=>[...e[4]||(e[4]=[x("示例一",-1)])]),_:1})]),_:1}),t(j,{title:"换衣"},{default:d(()=>[t(m,{class:"example-btn",size:"small",onClick:e[2]||(e[2]=S=>C("change_clothes"))},{default:d(()=>[...e[5]||(e[5]=[x("示例二",-1)])]),_:1})]),_:1})])):v("",!0),a("div",re,[t(b(G),{onRegister:b(r)},null,8,["onRegister"]),s.value==="face"?(c(),g("div",ue,[...e[6]||(e[6]=[a("div",{class:"title"},"说明:",-1),a("p",null,"1 图片都必须包含脸,否则出不来图",-1),a("p",null,'2 "明星图"可以先用mj绘画制作出来',-1),a("p",null,'3 "明星图"其实动漫图也行',-1),a("p",null,'4 "你的头像"建议用一寸个人照',-1)])])):v("",!0),s.value==="mix"?(c(),g("div",ce,[...e[7]||(e[7]=[a("div",{class:"title"},"说明:",-1),a("p",null,"1 合成至少2张图片",-1),a("p",null,"2 最多可传3张图",-1)])])):v("",!0)]),a("div",de,[t(m,{type:"primary",size:"large",block:"",onClick:L,loading:o.value},{default:d(()=>[t(b(I),{icon:"ant-design:thunderbolt-outlined"}),e[8]||(e[8]=x(" 立即生成 ",-1))]),_:1},8,["loading"])])]),a("div",pe,[e[12]||(e[12]=a("div",{class:"panel-title"},"生成结果",-1)),a("div",me,[!n.value&&!o.value?(c(),g("div",ge,[t(b(I),{icon:"ant-design:picture-outlined",size:"64",color:"#ccc"}),e[9]||(e[9]=a("p",null,"在左侧配置参数并点击生成",-1))])):v("",!0),o.value&&!n.value?(c(),g("div",ve,[t(E,{size:"large",tip:"正在绘制图片,请稍候..."})])):v("",!0),n.value?(c(),g("div",be,[a("img",{src:n.value,class:"result-image",alt:"Generated Image"},null,8,fe),a("div",_e,[t(m,{type:"primary",ghost:"",onClick:z},{default:d(()=>[t(b(I),{icon:"ant-design:eye-outlined"}),e[10]||(e[10]=x(" 预览 ",-1))]),_:1}),t(m,{type:"primary",ghost:"",onClick:q},{default:d(()=>[t(b(I),{icon:"ant-design:download-outlined"}),e[11]||(e[11]=x(" 下载 ",-1))]),_:1})])])):v("",!0)])])]),f.value?(c(),Z(D,{key:0,imageUrl:n.value,onHide:e[3]||(e[3]=S=>f.value=!1)},null,8,["imageUrl"])):v("",!0)],64)}}}),we=H(he,[["__scopeId","data-v-471f6819"]]),Me=Object.freeze(Object.defineProperty({__proto__:null,default:we},Symbol.toStringTag,{value:"Module"}));export{we as A,Me as a,Te as f};