PHP Classes

File: public_html/assets/assets/main-DBEAv0TD.js

Recommend this page to a friend!
  Packages of Rodrigo Faustino   Projeto Loja   public_html/assets/assets/main-DBEAv0TD.js   Download  
File: public_html/assets/assets/main-DBEAv0TD.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Projeto Loja
Resize and compress uploaded images
Author: By
Last change:
Date: 2 months ago
Size: 2,889 bytes
 

Contents

Class file image Download
function b(r,c,e){const t=r.getImageData(0,0,c,e).data;let a=0,o=0,n=0,i=0;for(let s=0;s<t.length;s+=40)a+=t[s],o+=t[s+1],n+=t[s+2],i++;return a=Math.floor(a/i),o=Math.floor(o/i),n=Math.floor(n/i),"#"+((1<<24)+(a<<16)+(o<<8)+n).toString(16).slice(1)}async function y(r,c=.8,e=1200){return new Promise((m,t)=>{if(!r.type.match(/image.*/)){t(new Error("O arquivo não é uma imagem."));return}const a=new FileReader;a.readAsDataURL(r),a.onload=o=>{const n=new Image;n.src=o.target.result,n.onload=()=>{const i=n.naturalWidth,s=n.naturalHeight;let l=i,d=s;l>e&&(d=Math.round(d*e/l),l=e);const g=document.createElement("canvas");g.width=l,g.height=d;const p=g.getContext("2d");p.drawImage(n,0,0,l,d);const w=b(p,l,d);g.toBlob(h=>{if(!h){t(new Error("Erro ao processar."));return}const v=r.name.replace(/\.[^/.]+$/,"")+".webp",u=new File([h],v,{type:"image/webp",lastModified:Date.now()});m({file:u,meta:{originalSize:r.size,compressedSize:u.size,originalWidth:i,originalHeight:s,finalWidth:l,finalHeight:d,dominantColor:w}})},"image/webp",c)},n.onerror=i=>t(i)},a.onerror=o=>t(o)})}const E=document.getElementById("uploadInput"),x=document.getElementById("infoCompressed"),C=document.getElementById("previewCompressed"),D=document.getElementById("previewOriginal"),f=document.getElementById("infoOriginal"),I="Camiseta Developer Senior",$="89.90",B="Camiseta de algodão egípcio com estampa de código.";E.addEventListener("change",async r=>{const c=r.target.files[0];if(c){D.src=URL.createObjectURL(c),f.innerText="Carregando...";try{const e=await y(c);f.innerHTML=` Tamanho: ${(e.meta.originalSize/1024).toFixed(2)} KB<br> Dimensões: ${e.meta.originalWidth} x ${e.meta.originalHeight} px `,C.src=URL.createObjectURL(e.file);const m=`<div style=" display:inline-block; width:20px; height:20px; background-color:${e.meta.dominantColor}; border:1px solid #ccc; vertical-align: middle; margin-left: 5px;"></div>`;x.innerHTML=` <strong>Metadados Extraídos:</strong><br> Tamanho Final: ${(e.meta.compressedSize/1024).toFixed(2)} KB<br> Dimensões Finais: ${e.meta.finalWidth} x ${e.meta.finalHeight} px<br> Cor Predominante: ${e.meta.dominantColor} ${m}<br> <hr> <span style="color: green">Pronto para envio!</span> `;const t=new FormData;t.append("title",I),t.append("price",$),t.append("description",B),t.append("image",e.file),t.append("meta_width",e.meta.finalWidth),t.append("meta_height",e.meta.finalHeight),t.append("meta_color",e.meta.dominantColor),t.append("meta_size",e.meta.compressedSize),console.log("Enviando para o servidor...");const a=await fetch("/products",{method:"POST",body:t}),o=await a.json();a.ok?(alert(`Sucesso! Produto ID ${o.id} criado.`),console.log(o)):alert("Erro: "+o.error)}catch(e){console.error(e),alert("Erro ao processar/enviar")}}});