Imágenes

Optimizar imagenes gratis online

Convierte, comprime y redimensiona imagenes para mejorar velocidad web, Core Web Vitals y SEO.

ImageFlow SEO

Convertidor y optimizador de imagenes para web, ecommerce, blogs y redes.

Entrada: HEIC, JPG, PNG, WEBP Salida: WEBP, JPG, PNG
Imágenes0
Original0 KB
Final0 KB
Ahorro0.0%

Resultados

Procesa, descarga individualmente o baja todo en ZIP.

Carga imagenes para ver los resultados optimizados.
Presets
Salida
Formato
Ajuste
`); win.document.close(); } async function processAll(){ clearMessage(); if(!state.files.length){ showMessage('error', 'Primero carga al menos una imagen.'); return; } await loadLibs(); const baseOptions=optionsFromUi(); els.processBtn.disabled=true; setZipEnabled(false); els.results.innerHTML=''; els.empty.hidden=true; state.processed=[]; updateSummary(); const cards=state.files.map((file)=> { const card=createProcessingCard(file); els.results.appendChild(card); return card; }); for (let index=0; index < state.files.length; index++){ const file=state.files[index]; const card=cards[index]; const progress=card.querySelector('.if-progress > div'); try { progress.style.width='28%'; const source=await convertHeicIfNeeded(file); const outputMime=baseOptions.outputMime||(/image\/(jpeg|png|webp)/.test(source.type||'') ? source.type:'image/webp'); progress.style.width='54%'; const output=await transform(source, { ...baseOptions, outputMime }); progress.style.width='82%'; let finalBlob=output.blob; let finalMime=output.mime; if(baseOptions.keepOriginal&&!isHeic(file)&&file.size < output.blob.size){ finalBlob=file; finalMime=file.type||output.mime; } const outputName=`${baseOptions.prefix}${slugName(file.name)}.${extFromMime(finalMime)}`.replace(/\s+/g, '-'); const item={ originalFile: file, originalName: file.name, originalSize: file.size, outputBlob: finalBlob, outputName, outputSize: finalBlob.size, width: output.width, height: output.height, ext: extFromMime(finalMime) }; state.processed.push(item); card.replaceWith(renderCard(item)); } catch (error){ card.innerHTML=`
Error
No se pudo procesar

${escapeHtml(file.name)}

${escapeHtml(error.message||'Error desconocido')}
`; } updateSummary(); } els.processBtn.disabled=false; setZipEnabled(Boolean(state.processed.length)); showMessage(state.processed.length ? 'success':'error', state.processed.length ? `Listo. Se procesaron ${state.processed.length} imagen(es).`:'No se pudo procesar ninguna imagen.'); } async function downloadZip(){ if(!state.processed.length){ showMessage('error', 'No hay imagenes procesadas.'); return; } const libs=await loadLibs(); if(!libs.JSZip){ showMessage('error', 'No se pudo cargar JSZip para generar el ZIP.'); return; } setZipEnabled(false); try { const zip=new libs.JSZip(); const folder=zip.folder('imagenes-optimizadas'); state.processed.forEach((item)=> folder.file(item.outputName, item.outputBlob)); const blob=await zip.generateAsync({ type: 'blob' }); downloadBlob(blob, 'imagenes-optimizadas.zip'); showMessage('success', 'ZIP generado correctamente.'); } catch (error){ showMessage('error', 'No se pudo generar el ZIP.'); } finally { setZipEnabled(true); }} function clearAll(){ state.files=[]; state.processed=[]; els.results.innerHTML=''; els.empty.hidden=false; setZipEnabled(false); clearMessage(); revokeUrls(); updateSummary(); } els.fileInput.addEventListener('change', (event)=> addFiles(event.target.files)); els.dropzone.addEventListener('click', ()=> els.fileInput.click()); els.dropzone.addEventListener('dragover', (event)=> { event.preventDefault(); els.dropzone.classList.add('dragover'); }); els.dropzone.addEventListener('dragleave', ()=> els.dropzone.classList.remove('dragover')); els.dropzone.addEventListener('drop', (event)=> { event.preventDefault(); els.dropzone.classList.remove('dragover'); addFiles(event.dataTransfer.files); }); $$('.if-preset').forEach((button)=> button.addEventListener('click', ()=> setPreset(button.dataset.preset))); els.processBtn.addEventListener('click', processAll); els.clearBtn.addEventListener('click', clearAll); els.zipBtn.addEventListener('click', downloadZip); els.zipTopBtn.addEventListener('click', downloadZip); setPreset('square'); updateSummary(); })(); //# sourceURL=wseo-image-pro-tool-js-after