DUTTIES
1
Foto
2
Generando
3
Resultado

¿Listo para probarlo?

Sube una foto de cuerpo entero para ver cómo te queda.

Try on

Try on
Aplicando el conjunto...
0%
CONSEJO
Mantén esta ventana abierta mientras generamos el resultado.
Normalmente tarda menos de 15 segundos
Tu prueba está lista
¿Te gusta este look? Llévatelo hoy mismo.
Result Look
Producto

Al usar este servicio, aceptas nuestros Términos de Servicio y Política de Privacidad.

LA IA PUEDE COMETER ERRORES.

'; document.body.appendChild(mask); } function hideUploadMask(){ let mask = document.getElementById('dutUploadMask'); if(mask) mask.remove(); } // DOM元素 var btnSelectPhoto = document.getElementById('btnSelectPhoto'); var selectPhotoInput = document.getElementById('selectPhotoInput'); var uploadPage = document.getElementById('uploadPage'); var loadingPage = document.getElementById('loadingPage'); var resultPage = document.getElementById('resultPage'); var progressBar = document.getElementById('progressBar'); var progressText = document.getElementById('progressText'); var btnTryAgain = document.getElementById('btnTryAgain'); var loadUserImg = document.getElementById('loadUserImg'); var finalResultImg = document.getElementById('finalResultImg'); // 初始化 setActiveStep(1); initTryCount(); updateCountTip(); // 选择图片 无弹窗,禁用按钮 btnSelectPhoto.addEventListener('click', ()=>{ if(isOverTryLimit()) return; selectPhotoInput.value = ''; selectPhotoInput.click(); }); // 图片上传逻辑 selectPhotoInput.addEventListener('change', async (e)=>{ const file = e.target.files[0]; if(!file) return; // 显示加载蒙层 showUploadMask(); // 禁用选图按钮 btnSelectPhoto.disabled = true; const localUrl = URL.createObjectURL(file); loadUserImg.src = localUrl; const formData = new FormData(); formData.append("file", file); try { const response = await fetch(UPLOAD_API, { method:"POST", body:formData }); const uploadData = await response.json(); const signResponse = await fetch(SIGN_URL_API, { method:"POST", headers:{ "Content-Type":"application/json" }, body:JSON.stringify({ pathname: uploadData.pathname }) }); const signData = await signResponse.json(); const personImage = signData.url; // 切到第二步 setActiveStep(2); uploadPage.classList.add("dut-try-on-hidden"); loadingPage.style.display = "flex"; loadingPage.classList.remove("fade-out"); resultPage.classList.remove("show"); startProgress(); const aiResponse = await fetch("https://app.dutties.com/api/tryon", { method:"POST", headers:{ "Content-Type":"application/json" }, body:JSON.stringify({ personImage: personImage, garmentImage: document.getElementById('dutTryOnGoodsShowImg').src || "", }) }); const aiData = await aiResponse.json(); const taskId = aiData.id; if(!taskId) throw new Error("没有返回任务ID"); checkStatus(taskId); } catch(error){ console.error("错误:", error); resetPage(); }finally{ // 关闭蒙层 恢复按钮 hideUploadMask(); btnSelectPhoto.disabled = false; } }); // 轮询任务状态 async function checkStatus(taskId){ const timer = setInterval(async ()=>{ try{ const res = await fetch(`${CHECK_TASK_API}?id=${taskId}`,{ method:"GET" }); const resData = await res.json(); if(resData.status === "succeeded" || resData.code === 200){ clearInterval(timer); let resultImg = resData.generation_url || resData.imgUrl || ""; finalResultImg.src = resultImg; var product = getProductCache(); if (product) { var thumb = document.querySelector('#dutTryOnResultGarmentThumb img'); if (thumb && product.image) { thumb.src = 'https://dutties.com/cdn/shop/' + product.image; } let nameDom = document.getElementById('tryOnGoodsName'); let priceDom = document.getElementById('tryOnGoodsPrice'); if(nameDom && product.title){ nameDom.innerText = product.title; } if(priceDom && product.price){ priceDom.innerText = product.price; } } setActiveStep(3); loadingPage.classList.add("fade-out"); setTimeout(()=>{ loadingPage.style.display = "none"; resultPage.style.display = "flex"; setTimeout(()=>resultPage.classList.add("show"),50); },600); addTryCount(); } if(resData.status === "fail" || resData.status === "canceled"){ clearInterval(timer); resetPage(); } }catch(e){ clearInterval(timer); console.error("轮询出错",e); } },1500); } // 立即购买 document.getElementById('btnBuyNow').addEventListener('click',function(){ const cartBtn = document.querySelector('.t4s-product-form__submit'); const escBtn = document.querySelector('.mfp-close'); if(cartBtn) cartBtn.click(); if(escBtn) escBtn.click(); }) // 进度条 function startProgress(){ let progress = 0; const timer = setInterval(()=>{ if(progress