2 lines
13 KiB
Java
2 lines
13 KiB
Java
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};
|