Base64 adalah encoding, bukan kompresi
Base64 standar mewakili tiga byte dengan empat karakter: panjang tepat 4 × ceil(n / 3), sehingga kenaikan jangka panjang sekitar 33,3%. Data URL juga menambah prefiks MIME.
Alat ini mengecilkan byte gambar terlebih dahulu: dekode, ubah dimensi, kualitas, atau format bila berguna, lalu buat Base64 standar lagi.
Gzip menghasilkan data berbeda
Gzip pada Base64 menghasilkan biner yang harus didekompresi sebelum gambar dapat ditampilkan. Mengenkodenya lagi tidak menjadikannya Data URL gambar biasa.
JPEG, PNG, dan WebP sudah terkompresi. Mengurangi piksel, kualitas lossy, metadata, atau mengganti format bisa membantu, tanpa menjamin lossless atau lebih kecil.
Target ukuran tanpa hasil membesar
JPEG dan WebP memakai pencarian kualitas dengan batas tetap. Jika masih besar, dimensi diturunkan dalam putaran terbatas sambil menjaga rasio.
Jika karakter Base64 standar tidak berkurang, byte asli dipertahankan. Hasil lebih kecil yang belum mencapai target KB ditandai dengan jelas.
Proses lokal dan batas format
Semua tetap di tab: tanpa unggah, URL jarak jauh, telemetri, atau pustaka gambar. Batasnya 20 MiB dan 16 megapiksel.
SVG, GIF, ICO, dan WebP animasi ditolak agar tidak dijalankan atau kehilangan frame. Auto menjaga transparansi; JPEG memerlukan latar yang dikonfirmasi. Canvas bukan pemindai malware.
Kapan tidak memakai Base64
Cocok untuk aset kecil mandiri. Gambar besar lebih baik memakai Blob URL, file terpisah, atau unggahan biner agar cache dan transfer terpisah.
Byte gambar dan karakter Base64 dibandingkan sendiri-sendiri. Menghapus prefiks data: tidak dihitung sebagai kompresi.
Kegagalan umum yang dijelaskan
- Karakter, padding, atau panjang Base64 tidak valid.
- MIME yang dinyatakan berbeda dari magic bytes.
- Lebih dari 20 MiB, 16 megapiksel, atau gagal didekode browser.
- Animasi, multiframe, SVG, atau gambar sudah sangat optimal.
Perintah yang setara
Gunakan runtime atau shell yang tersedia. Validasi input tidak tepercaya dan jangan mencetak data biner langsung ke terminal.
Python
from PIL import Image
from io import BytesIO
import base64
image = Image.open(BytesIO(base64.b64decode(value)))
out = BytesIO(); image.save(out, 'WEBP', quality=82)
result = base64.b64encode(out.getvalue()).decode('ascii')
JavaScript
const blob = new Blob([bytes], { type: mime });
const bitmap = await createImageBitmap(blob);
ctx.drawImage(bitmap, 0, 0, width, height);
const output = await new Promise(r => canvas.toBlob(r, 'image/webp', 0.82));
bitmap.close();
Shell
printf '%s' "$VALUE" | base64 --decode > input.png
magick input.png -resize '1920x1920>' -quality 82 output.webp
base64 --wrap=0 output.webp
Standar dan referensi resmi
FAQ kompresi gambar Base64
Bisakah Base64 dikompresi?
Kompresi umum membuat format biner lain. Agar tetap Base64 gambar standar, optimalkan byte lalu enkode ulang.
Bisa langsung dipakai di img src?
Ya. Raw adalah Base64 standar dan Data URL memakai data:image/...;base64.
Bagaimana menjadi 100 KB?
Pilih Custom dan 100 KB. Pencarian kualitas dan dimensi dibatasi; tidak semua gambar dapat mencapai target.
Apakah kualitas turun?
Bisa. Resize dan kualitas JPEG/WebP bersifat lossy; PNG mungkin tidak menjadi lebih kecil.
Mengapa sekitar 33% lebih besar?
Tiga byte menjadi empat karakter. Rumus tepatnya 4 × ceil(n / 3).
Apakah gambar diunggah?
Tidak. Analisis, Canvas, pratinjau, salin, dan unduh berjalan lokal.
Gzip sebelum atau sesudah Base64?
Untuk transfer, kompres respons HTTP luar bila sesuai. Gzip tidak dapat dipakai sebagai Data URL tanpa dekompresi.