Convert Any Image to GIF Format
Upload any image and convert to high-quality GIF instantly — 100% browser-based & secure.
New: Live quality slider (size vs quality) + real-time KB preview!
Learn more about convert image to gif.
Supports JPG, JPEG, PNG, WebP, HEIC, AVIF, TIFF, PSD, RAW, SVG & more
🖼️⬆️
Drag & Drop or Click to Upload
Any format — recommended < 20MB
Original Image
GIF Preview
Move slider & click Convert
Estimated GIF size: — KB
Quality Slider Explained
- • 1–100% — Controls the
qualityparameter incanvas.toBlob('image/gif', quality/100) - • Higher % → better visual quality + larger file size
- • Lower % → smaller file, but more color banding / dithering
- • GIF is always palette-based (256 colors max) — quality affects how aggressively colors are quantized
- • Live size estimate shown (approximate — final size after real conversion may vary slightly)
Size: ${(file.size / 1024 / 1024).toFixed(2)} MB
Type: ${file.type} `; // Pre-load image for fast conversions originalImage = await new Promise((res, rej) => { const img = new Image(); img.onload = () => res(img); img.onerror = rej; img.src = e.target.result; }); previewArea.classList.remove(‘hidden’); updateEstimatedSize(); }; reader.readAsDataURL(file); } // Live update quality display & estimate size qualitySlider.addEventListener(‘input’, () => { qualityValue.textContent = `${qualitySlider.value}%`; if (originalImage) updateEstimatedSize(); }); async function updateEstimatedSize() { if (!originalImage) return; estimatedSize.textContent = ‘Calculating…’; try { const canvas = document.createElement(‘canvas’); canvas.width = originalImage.width; canvas.height = originalImage.height; const ctx = canvas.getContext(‘2d’); ctx.drawImage(originalImage, 0, 0); const q = parseInt(qualitySlider.value) / 100; const blob = await new Promise(r => canvas.toBlob(r, ‘image/gif’, q)); if (blob) { const kb = (blob.size / 1024).toFixed(1); estimatedSize.textContent = `${kb} KB`; } else { estimatedSize.textContent = ‘— KB’; } } catch (e) { estimatedSize.textContent = ‘Error’; } } convertBtn.addEventListener(‘click’, async () => { if (!selectedFile || !originalImage) return alert(‘Please upload an image first! 🖼️’); convertBtn.disabled = true; convertBtn.textContent = ‘Converting… ⏳’; try { const canvas = document.createElement(‘canvas’); canvas.width = originalImage.width; canvas.height = originalImage.height; const ctx = canvas.getContext(‘2d’); ctx.drawImage(originalImage, 0, 0); const quality = parseInt(qualitySlider.value) / 100; const blob = await new Promise(resolve => { canvas.toBlob(b => resolve(b), ‘image/gif’, quality); }); if (!blob) throw new Error(‘GIF blob creation failed’); gifBlob = blob; if (gifUrl) URL.revokeObjectURL(gifUrl); gifUrl = URL.createObjectURL(blob); gifPreview.src = gifUrl; gifPlaceholder.style.display = ‘none’; gifInfo.innerHTML = ` Size: ${(blob.size / 1024).toFixed(1)} KB
Quality used: ${qualitySlider.value}%
Dimensions: ${originalImage.width} × ${originalImage.height} `; downloadBtn.disabled = false; downloadBtn.classList.remove(‘opacity-50′,’cursor-not-allowed’); } catch (err) { console.error(‘Conversion error:’, err); alert(`Failed to convert: ${err.message || ‘Unknown error’}\nTry a smaller image or different quality.`); } finally { convertBtn.disabled = false; convertBtn.textContent = ‘Convert to GIF’; } }); downloadBtn.addEventListener(‘click’, () => { if (!gifBlob) return; const a = document.createElement(‘a’); a.href = gifUrl; a.download = (selectedFile.name.replace(/\.[^/.]+$/, ”) || ‘image’) + ‘.gif’; a.click(); }); resetBtn.addEventListener(‘click’, () => { fileInput.value = ”; previewArea.classList.add(‘hidden’); selectedFile = null; originalImage = null; gifBlob = null; if (gifUrl) { URL.revokeObjectURL(gifUrl); gifUrl = null; } estimatedSize.textContent = ‘— KB’; qualitySlider.value = 92; qualityValue.textContent = ‘92%’; });
Latest posts by allbesttool.com (see all)
- Why Ziptie? On Choosing a Search Performance Tool - February 8, 2026
- AdSense Approval Checker tools - May 23, 2024
