1import{o as oe,t as ae,u as ce,p as re,f as se,i as ie,s as me,j as de,e as N,g as ge,m as le,n as pe}from"./mediaInputFromFilename-AaKRjYpC.js";import{c as fe,e as ue}from"./ctMediaProgressUi-wz6CtyvX.js";import{c as ve}from"./mediaEncodeFileReset-t77V_-0z.js";import{a as we,b as be}from"./mediaPreviewSource-BZTPxCO_.js";import{w as Pe,c as ye}from"./fileDropzone-CA_uaFcV.js";import{f as M}from"./ctMediaConvertDownload-n0-64pPl.js";import{w as Ie,c as Fe}from"./ctPendingDownload-Dt1VJrS4.js";import{w as he}from"./ctMediaSourceOutputName-BkKiostT.js";import"./transientNotice-Ds_di7lD.js";import"./ctFullscreenAd-wL9Ec5Hb.js";import"./app-Dsk0FNLH.js";const F=async e=>{const o=document.createElement("canvas"),a=o.getContext("2d"),n=new Image;return n.src=URL.createObjectURL(e),await new Promise((t,s)=>{n.onload=()=>t(),n.onerror=()=>s()}),o.width=n.width,o.height=n.height,a.drawImage(n,0,0),URL.revokeObjectURL(n.src),o.toDataURL("image/vnd.adobe.photoshop")},R=async(e,o)=>{const a=document.createElement("canvas"),n=a.getContext("2d"),t=new Image;return t.src=URL.createObjectURL(e),await new Promise((s,m)=>{t.onload=()=>s(),t.onerror=w=>m(w)}),a.width=t.width,a.height=t.height,n.drawImage(t,0,0),URL.revokeObjectURL(t.src),a.toDataURL(o)},r=async(e,o)=>new Promise((a,n)=>{const t=new FileReader;t.onload=function(){const s=new Image;s.onload=function(){const m=document.createElement("canvas");m.width=s.width,m.height=s.height,m.getContext("2d").drawImage(s,0,0),m.toBlob(f=>{if(!f){n(new Error("toBlob failed"));return}a(URL.createObjectURL(f))},o)},s.onerror=()=>n(new Error("Image load failed")),s.src=t.result},t.onerror=()=>n(t.error),t.readAsDataURL(e)}),x=async e=>r(e,"image/jpeg"),Ce=async e=>r(e,"image/tiff"),Ee=async e=>r(e,"image/bmp"),Re=async e=>r(e,"image/webp"),O=async e=>r(e,"image/png"),W=async e=>r(e,"image/tiff"),A=async e=>F(e),J=async e=>r(e,"image/bmp"),_=async e=>r(e,"image/webp"),De=async e=>r(e,"image/png"),k=async e=>r(e,"image/jpeg"),Le=async e=>r(e,"image/tiff"),Be=async e=>F(e),je=async e=>r(e,"image/webp"),$=async e=>r(e,"image/png"),E=async e=>r(e,"image/jpeg"),z=async e=>r(e,"image/bmp"),q=async e=>F(e),H=async e=>r(e,"image/webp"),Ue=async e=>R(e,"image/png"),K=async e=>R(e,"image/jpeg"),Te=async e=>R(e,"image/bmp"),V=async e=>R(e,"image/tiff"),Se=async e=>{const o=document.createElement("canvas"),a=o.getContext("2d"),n=new Image;return n.src=URL.createObjectURL(e),await new Promise((t,s)=>{n.onload=()=>t(),n.onerror=m=>s(m)}),o.width=n.width,o.height=n.height,a.drawImage(n,0,0),URL.revokeObjectURL(n.src),o.toDataURL("image/webp")},Ge=async e=>r(e,"image/png"),Y=async e=>r(e,"image/jpeg"),Ne=async e=>r(e,"image/bmp"),Me=async e=>r(e,"image/tiff"),xe=async e=>F(e);async function Oe(e,o,a){const n={png:{jpeg:x,jpg:x,tiff:Ce,psd:F,bmp:Ee,webp:Re},jpeg:{png:O,tiff:W,psd:A,bmp:J,webp:_},jpg:{png:O,tiff:W,psd:A,bmp:J,webp:_},bmp:{png:De,jpeg:k,jpg:k,tiff:Le,psd:Be,webp:je},tiff:{png:$,jpeg:E,jpg:E,bmp:z,psd:q,webp:H},tif:{png:$,jpeg:E,jpg:E,bmp:z,psd:q,webp:H},psd:{png:Ue,jpeg:K,jpg:K,bmp:Te,tiff:V,tif:V,webp:Se},webp:{png:Ge,jpeg:Y,jpg:Y,bmp:Ne,tiff:Me,psd:xe}},t=o.toLowerCase(),s=a.toLowerCase(),m=n[t];return m&&m[s]?m[s](e):null}function I(e){const o=document.getElementById("ctImgConvToastBody"),a=document.getElementById("ctImgConvToast");if(!o||!a||typeof bootstrap>"u"){window.alert(e);return}o.textContent=e,bootstrap.Toast.getOrCreateInstance(a).show()}function Ye(){const e=document.getElementById("ct-image-converter-root");if(!e)return;const o=(e.dataset.ctFrom||"png").toLowerCase(),a=(e.dataset.ctTo||"jpg").toLowerCase(),n=a==="jpg"?"jpeg":a,t=document.getElementById("ctImgConvFile"),s=document.getElementById("ctImgConvDrop"),m=document.getElementById("ctImgConvDropCaption"),w=document.getElementById("ctImgConvPreview"),f=document.getElementById("ctImgConvWasmStatus"),d=fe({barId:"ctImgConvProgBar",labelId:"ctImgConvProgLabel",percentId:"ctImgConvProgPct"}),j=ve(d.ui),h=document.getElementById("ctImgConvName"),l=document.getElementById("ctImgConvBtn"),C=document.getElementById("ctImgConvDownload"),b=document.getElementById("ctImgConvClr");if(!t||!h||!l||!b)return;const P=Fe();Ie(C,P);const D=he({nameInput:h,defaultName:"converted",suffix:"_converted",getSourceFileName:()=>{var i,g;return((g=(i=t.files)==null?void 0:i[0])==null?void 0:g.name)||null}});t.setAttribute("accept",oe()),s&&Pe({input:t,drop:s,dragContainer:s.closest(".card-body"),captionEl:m});let p,v,y=null;const U=()=>{y&&(URL.revokeObjectURL(y),y=null),be(w)};async function Q(){return p&&!p.loaded&&(p=null,v=null),p||(v||(me(f),v=de({onProgress:i=>ge(f,i)}).then(i=>(p=i,N(f,le),i)).catch(i=>{throw v=null,p=null,N(f,pe),i})),v)}t.addEventListener("change",()=>{var g;const i=(g=t.files)==null?void 0:g[0];if(j.onFileChanged("Ready to convert"),U(),!i){l.disabled=!0,b.disabled=!0,D.onFileCleared();return}y=URL.createObjectURL(i),we(w,y),l.disabled=!1,b.disabled=!1,D.onFileReady()}),b.addEventListener("click",()=>{ae(p),p=null,v=null,P.clear(),P.syncDownloadButton(C),ye(t),U(),l.disabled=!0,b.disabled=!0,D.onFileCleared(),j.onFileChanged("Ready to convert")}),l.addEventListener("click",async()=>{var T,S,G;const i=(T=t.files)==null?void 0:T[0];if(!i)return;if(i.size>50*1024*1024){I("File exceeds 50 MB.");return}
1d.beginEncoding("Convertingâ¦"),await new Promise(c=>{requestAnimationFrame(()=>c(void 0))});let g=null;try{g=await Oe(i,ce(i.name,o),a)}catch{g=null}if(g){l.disabled=!0;try{const c=(h.value||"converted").replace(/[^\w\-]+/g,"_");await M(P,C,{objectUrl:g,filename:`${c}.${a}`,progressUi:d.ui}),d.ui.setDone("Done â click Download")}catch(c){I(c instanceof Error?c.message:"Conversion failed."),d.ui.hardReset("Ready to convert")}finally{l.disabled=!((S=t.files)!=null&&S.length)}return}const X=re(i.name,o);let u;try{u=await Q()}catch(c){I(c instanceof Error?c.message:"Could not load the converter."),d.ui.hardReset("Ready to convert");return}if(!u){I("Could not load the converter."),d.ui.hardReset("Ready to convert");return}l.disabled=!0;const L=`input.${X}`,B=`output.${n}`;try{d(5,"Reading fileâ¦"),await u.writeFile(L,await se(i)),await ue(u,["-y","-i",L,B],{phaseLo:10,phaseHi:90,labelForPercent:ne=>`Converting⦠${ne}%`,onProgress:d});const c=await u.readFile(B),Z=c.buffer?c.buffer.slice(c.byteOffset,c.byteOffset+c.byteLength):c,ee=new Blob([Z],{type:`image/${n}`}),te=(h.value||"converted").replace(/[^\w\-]+/g,"_");await M(P,C,{blob:ee,filename:`${te}.${a}`,progressUi:d.ui});try{await u.deleteFile(L),await u.deleteFile(B)}catch{}d.ui.setDone("Done â click Download")}catch(c){ie(c)||I(c instanceof Error?c.message:"Conversion failed."),d.ui.hardReset("Ready to convert")}finally{l.disabled=!((G=t.files)!=null&&G.length)}})}export{Ye as initImageConverterPage};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.