Görselleri Base64 Yapma ve Data URI Kullanım Rehberi
Görselleri Base64 veri dizelerine dönüştürmeyi, HTML ve CSS içinde Data URI kullanımını ve sayfa hızı ile önbellekleme üzerindeki etkilerini keşfedin.
- Base64 kodlaması ikili resimleri RFC 2397 formatında metin dizgilerine çevirir.
- İkili veriden metin tabanlı formata geçiş sırasında her 3 baytlık girdi 4 ASCII karakterine dönüştürüldüğü için dosya boyutunda matematiksel olarak net %33,3 oranında bir genişleme meydana gelir.
- Küçük ikonların ve yükleme göstergelerinin doğrudan stil dosyalarına gömülmesi ek HTTP ağ bağlantılarını ortadan kaldırır, ancak tarayıcının bağımsız önbellek avantajını sınırlar.
Görselleri Base64 formatına dönüştürmek, harici bir sunucu bağlantısı açmadan görsel verisinin doğrudan kod dosyalarına gömülmesini sağlar. RFC 2397 standardında tanımlanan Data URI şeması, resim piksel verilerini doğrudan doküman içine yerleştirir. Ağ gecikmesini azaltmak adına faydalı bir yöntem olsa da dosya boyutundaki artış ve tarayıcı ayrıştırma süreçleri dikkatle planlanmalıdır.
Data URI Şeması ve Base64 Kodlama Mantığı
Data URI şeması, web kaynaklarının harici bir dosya bağlantısı yerine doğrudan satır içi (inline) olarak yüklenmesini sağlayan bir URI standardıdır. Standart görsel tanımlarında kaynak niteliği sunucudaki bir dosya yolunu işaret eder. Data URI kullanıldığında ise görselin MIME türü ve ham verisi doğrudan bu nitelik içerisine yazılır.
Bir görsel Data URI dizisinin sözdizimi şu biçimdedir:
data:[<mediatype>][;base64],<data>
PNG, JPEG veya WebP gibi raster grafikler ham ikili verilerden oluşur. İkili veriler HTML veya CSS dokümanlarına düz metin olarak eklendiğinde sözdizimi hatalarına yol açar. Base64 algoritması, 8 bitlik bayt bloklarını yalnızca 64 adet güvenli ASCII karakterinden (A-Z, a-z, 0-9, +, /) oluşan bir kümeye dönüştürerek metin uyumluluğu sağlar. Tarayıcı motoru bu metin dizisini okuduğunda, veriyi bellek üzerinde piksel haritasına geri çözümler ve ekrana basar.
Tarayıcı üzerinde çalışan Görsel Base64 dönüştürücü aracı ile herhangi bir yerel görsel dosyasını sunucuya yüklemeden anında Data URI formatına çevirebilirsiniz.
Yüzde 33 Boyut Artışı: Matematiksel Hesaplama
Base64 kodlama işlemi, sıkıştırma uygulanmadan önceki ham veri boyutunu tam olarak üçte bir oranında artırır. Bu artışın temel sebebi bit eşlemesidir. Standart bir bilgisayar baytı 8 bitten oluşur. Base64 kodlayıcı, ikili veri akışını 6 bitlik gruplara ((2^6 = 64) olasılık) ayırır. Her 6 bit bir ASCII karakterine denk geldiğinden, 3 baytlık (24 bit) ikili veri 4 karakterlik (24 bit) Base64 çıktısına dönüşür.
3 İkili Bayt (3 × 8 = 24 bit) --> 4 Base64 ASCII Karakteri (4 × 6 = 24 bit)
Boyut Oranı: 4 / 3 = 1,3333... (%33,33 artış)
Girdi bayt sayısı 3'ün katı olmadığında eksik kalan kısımlar metin sonuna eklenen = dolgu karakterleriyle tamamlanır. Brotli veya Gzip transfer sıkıştırması aktarım maliyetini bir miktar düşürse de, istemci tarafında DOM veya CSSOM ayrıştırma yükü devam eder. Tarayıcı motorları bu büyük dizgileri metin olarak ayrıştırmak ve ardından bellekte ikili nesnelere dönüştürmek için ek CPU döngüsü harcar.
Genel metin kodlamaları için Base64 çevirici aracıyla ikili ve metin dönüşümleri test edilebilir.
Harici Dosya ve Base64 Kullanım Kriterleri
Görselleri satır içi gömmek ile harici dosya olarak yüklemek arasında belirgin mimari farklar bulunur.
| Değerlendirme Kriteri | Harici Görsel Dosyası | Gömülü Base64 Data URI | |---|---|---| | HTTP İstek Sayısı | Her görsel için +1 istek | 0 ek istek | | Veri Boyutu | Sıkıştırılmış dosya boyutu | Orijinal ikili boyutun ~%133'ü | | Tarayıcı Önbelleği | Sayfalar arası bağımsız önbellekleme | HTML veya CSS dosyasının ömrüne bağlı | | Doküman Ayrıştırma | Asenkron, engellemesiz yükleme | Büyük dizilerde daha yavaş CSSOM/DOM | | Uygun Boyut Sınırı | Tüm boyutlar (özellikle > 2 KB) | Mikro varlıklar (tercihen < 1.5 KB) |
Doğru Kullanım Alanları
- Kritik UI İkonları ve Yükleme Göstergeleri: Sayfa açılışında gecikme olmadan ekrana basılması gereken küçük göstergeler sıfır ağ gecikmesinden yararlanır.
- Tek Dosyalı HTML Dokümanları ve E-posta Şablonları: Harici görsel sunucularına erişim kısıtı olan e-posta bültenlerinde görsellerin gömülmesi kırık link riskini ortadan kaldırır.
- Canvas Grafikleri: İstemci tarafında dinamik çizim fonksiyonlarıyla üretilen görseller doğrudan dışa aktarılabilir.
- Çevrimdışı Web Uygulamaları: Progressive Web App (PWA) ve yerel depolama kullanan uygulamalarda küçük varlıkların tek parçada saklanmasını sağlar.
Kaçınılması Gereken Durumlar
Fotoğraflar, banner görselleri veya 10 KB üzerindeki içerik resimlerini Base64 formatına çevirmek sayfa performansını olumsuz etkiler. HTML dosyaları statik görseller kadar agresif önbelleğe alınmadığından, her sayfa ziyaretinde yüzlerce kilobaytlık metin baştan indirilir. Ayrıca devasa Base64 dizileri HTML dosyasının İlk Zengin İçerikli Boyama (FCP) süresini geciktirebilir. Görselleri gömmeden önce görsel sıkıştırma rehberi adımlarını uygulayarak gereksiz meta verileri ayıklamak gerekir.
HTML, CSS ve JavaScript ile Uygulama Örnekleri
Data URI formatındaki bir görseli web arayüzünde kullanmak için standart kod yapıları yeterlidir.
HTML içinde kaynak tanımlama:
<!-- Data URI ile gomulu vektor rozet -->
<picture>
<source srcset="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iIzM0OThlYiIgdmlld0JveD0iMCAwIDE2IDE2Ij48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iOCIvPjwvc3ZnPg==" />
</picture>
Stil sayfalarında arka plan görseli olarak tanımlama:
.durum-rozeti {
display: inline-block;
width: 16px;
height: 16px;
background-repeat: no-repeat;
background-position: center;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==");
}
JavaScript ile kullanıcının seçtiği bir dosyayı anında Data URI'ye çevirip arayüzde önizleme:
function dosyayiBase64eCevir(dosya) {
return new Promise((resolve, reject) => {
const okuyucu = new FileReader();
okuyucu.onload = () => resolve(okuyucu.result);
okuyucu.onerror = (hata) => reject(hata);
okuyucu.readAsDataURL(dosya);
});
}
Sıkça Sorulan Sorular
Görselleri Base64 formatına çevirmek SEO sıralamasını etkiler mi?
Base64 kodlaması arama motoru sıralamalarını doğrudan değiştirmez. Ancak kritik arayüz ikonlarında kullanıldığında ağ şelalesini (waterfall) kısaltarak LCP ve CLS gibi Core Web Vitals metriklerinin iyileşmesine katkı sağlayabilir.
Arama motorları Base64 formatındaki resimleri indeksleyebilir mi?
Google gibi modern arama motorları Data URI içindeki görselleri çözebilir, ancak bunları Google Görseller arama sonuçlarında bağımsız bir görsel URL'i gibi konumlandırmaz. Görsel aramasından trafik hedeflenen resimler bağımsız dosyalar olarak sunulmalıdır.
Base64 dizisi neden orijinal görsel dosyasından daha büyüktür?
Base64 algoritması 8 bitlik ikili baytları 6 bitlik ASCII karakterleriyle temsil eder. Bu bit eşleme farkı matematiksel olarak %33,3 oranında sabit bir veri genişlemesine neden olur.
SVG için Base64 mü yoksa doğrudan satır içi SVG mi tercih edilmelidir?
SVG metin tabanlı bir XML formatıdır. HTML içine doğrudan vektör etiketleriyle eklemek veya CSS içinde UTF-8 formatında (data:image/svg+xml;utf8,...) kullanmak, Base64 dönüşümünün getirdiği %33'lük ek yükü önlediği için daha verimlidir.