Resim sıkıştırma denince ilk akla gelen genellikle bir takas ilişkisidir: dosyayı küçültmek, kaliteden bir şeyler feda etmek demektir. JPEG için bu büyük ölçüde doğrudur — ama hiç optimize edilmemiş bir kaynak dosyası, piksel verisiyle hiçbir ilgisi olmayan onlarca kilobayt ek veri taşıyor olabilir. Bu veriden kurtulmak hem ücretsizdir hem kayıpsızdır.
Daha kesin bir çerçeve kurmak gerekirse: "kalite kaybı olmadan küçültme" iki farklı şeyi kapsar. Birincisi gerçekten kayıpsız küçültme — piksel verisi hiç değişmez, matematiksel olarak özdeş çıktı üretilir. İkincisi görsel olarak algılanamayan küçültme — bir miktar veri atılır ama gözle ayırt edilemez. Bu ikisi arasındaki sınırı bilmek, hangi tekniği ne zaman kullanacağınıza karar vermede belirleyicidir.
Metadata: piksel verisi olmayan ağırlık
Dijital fotoğraf makineleri her çekimle birlikte EXIF bloğunu dosyaya gömer. Bu blok; çekim tarihi, GPS koordinatları, kamera modeli, enstantane hızı, ISO değeri ve odak uzaklığından başka, gömülü bir küçük resim (embedded thumbnail) de içerebilir. Akıllı telefon fotoğraflarında EXIF bloğu genellikle 30-60KB aralığındadır; bazı profesyonel fotoğraf makinelerinde thumbnail ile birlikte 200KB'yi geçer.
ICC renk profilleri ayrı bir yük kaynağıdır. AdobeRGB veya ProPhoto gibi geniş gamut profillerini bazı yazılımlar dosyaya gömer. Web için hedef ortam sRGB olduğundan bu profiller çoğu durumda anlamsız bir ağırlık taşır; tarayıcılar zaten sRGB varsayımıyla çalışır, gömülü profil rengi değiştirmez, sadece dosyayı büyütür. Ek olarak XMP (Extensible Metadata Platform) alanı da benzer bir yük kaynağıdır: stok fotoğraf sitelerinden indirilen bazı görseller telif hakkı notları, anahtar kelimeler ve yazar bilgisi içeren XMP bloğu taşır.
PNG dosyalarında da aynı sorun vardır. iTXt, tEXt ve zTXt chunk'ları yazılım bilgisi veya diğer meta verileri saklar. cHRM chunk'u renk karakteristiklerini, gAMA chunk'u gamma değerini içerir. Tarayıcıların büyük çoğunluğu bunları zaten dikkate almaz; kaldırılmaları görsel çıktıyı etkilemez.
Metadata temizlemenin temel avantajı budur: herhangi bir kalite kararı vermek zorunda kalmazsınız. Dönüşüm yoktur, piksel hesabı yoktur, görsel fark yoktur. Dosya küçülür, ekranda görünen hiçbir şey değişmez.
PNG'de kayıpsız yer kazanma teknikleri
PNG, Deflate algoritmasıyla sıkıştırılır. Ancak çoğu tasarım aracı bu sıkıştırmayı hız öncelikli ayarlarla yapar. Aynı piksel verisini daha iyi bir Deflate uygulamasıyla yeniden sıkıştırmak — zopfli veya oxipng tarzı araçlarla — dosyayı %5-20 küçültebilir. Hiçbir piksel değişmez; yalnızca paketlenme biçimi iyileşir.
PNG standardı her piksel satırı için farklı "filtre" tipleri tanımlar. Filtre, satır piksellerini sıkıştırmadan önce matematiksel olarak dönüştürür ve Deflate'in daha düşük entropi bulmasını kolaylaştırır. None, Sub, Up, Average ve Paeth olmak üzere beş tip vardır. Farklı görsel içerikler farklı filtre tiplerinde daha iyi sıkıştırılır. Çoğu encoder sabit bir filtre stratejisi kullanır; adaptif strateji ek kazanım sağlar.
Renk sayısına bağlı bir teknik daha vardır: indexed color, yani palette modu. Bir PNG dosyasındaki benzersiz renk sayısı 256 veya altındaysa, dosyayı 24-bit RGB yerine 8-bit palet moduna dönüştürmek ciddi boyut azalması sağlar. Düz renkli logolar, ikonlar, şemalar ve vektörden rasterize edilmiş grafikler bu teknikten en çok yararlanan türlerdir. Piksel düzeyinde sonuç özdeştir — çünkü 256 palet rengi, o görselin tüm gerçek renklerini zaten kapsar.
Fotoğraf tarzı içeriklerde indexed color uygulanamaz. Benzersiz renk sayısı milyonları aştığı için palete indirgeme belirgin kalite kaybına yol açar. Ama ekran görüntüleri, yazılım arayüzü görselleri ve basit ikonlar bu teknikten doğrudan yararlanır. Büyük ölçekte çalışıyorsanız — diyelim ki 2000 ürün ikonu olan bir e-ticaret sitesi — her dosyada 10-15KB kazanım toplamda ciddi bir fark anlamına gelir. Görsel sıkıştırma aracına yükleyerek farklı sıkıştırma modlarının çıktısını doğrudan karşılaştırabilirsiniz.
JPEG üzerinde yeniden kodlamadan yapılabilecekler
JPEG, kodlama anında kalıcı veri atar. Bu, formatın temel tasarım kararıdır ve sonradan geri alınamaz. Bir kez kaydedildikten sonra dosyayı daha yüksek kalite ayarında tekrar kaydetseniz bile ilk aşamadaki kayıp ortadan kalkmaz. Bunu "sıkıştırma türleri arasındaki farkı ele alan yazıda" daha ayrıntılı bulabilirsiniz.
Ama JPEG dosyasını yeniden kodlamadan küçülten işlemler de vardır.
Progressive JPEG: Baseline JPEG, piksel bloklarını üstten alta düzenli sıraya koyar. Progressive mod ise aynı DCT katsayılarını katmanlar halinde düzenler; görüntü önce düşük çözünürlüklü bir önizleme olarak yüklenir, ardından netleşir. Yeniden kodlama gerektirmez — sadece veri organizasyonu değişir. Bu yeniden organizasyon genellikle %2-8 boyut azalması sağlar; büyük dosyalarda oran %10'a ulaşabilir.
Huffman tablosu optimizasyonu: JPEG, piksel bloklarını Huffman kodlamasıyla entropi sıkıştırır. Standart encoder genel amaçlı tablolar kullanır; görüntüye özgü optimize tablolar %2-5 ek kazanım sağlayabilir. Piksel verisine dokunulmaz, yalnızca entropi kodlaması iyileşir.
Metadata kaldırma: JPEG için de geçerlidir. EXIF, IPTC ve XMP bloklarının tümü, yeniden kodlama yapılmaksızın kaldırılabilir.
Şunu da netleştirmek gerekir: JPEG kalite ayarını değiştirmek, görüntüyü yeniden örneklemek veya chroma subsampling değerini değiştirmek artık lossless değildir. Bu işlemler yeniden kodlama gerektirir ve ek kalıcı kayıp ekler. Bazı optimizasyon yazılımları bunları "kalite kaybı olmadan" olarak sunar; teknik açıdan bu doğru değildir.
WebP lossless: PNG'den küçük, piksel düzeyinde aynı
WebP'nin iki ayrı çalışma modu vardır. Lossy modu JPEG'e işlevsel olarak benzerdir. Lossless modu ise PNG gibi piksel verisinin tamamını korur — ama WebP lossless, eşdeğer bir PNG lossless dosyasına kıyasla genellikle %25-35 daha küçük çıkar.
Bu farkın nedeni teknik bir tercihten gelir. WebP lossless, VP8L formatını kullanır. Bu format; renk kanalları arasındaki uzamsal korelasyonu (spatial prediction) DEFLATE'e kıyasla çok daha agresif biçimde değerlendirir, aynı zamanda LZ77 geri referanslarını renk dönüşüm adımlarıyla birleştirir. Sonuç olarak aynı piksel verisini daha az bit ile temsil edebilir. İki dosyadan decode edilen piksel dizileri matematiksel olarak özdeştir.
Bir sınırlamayı belirtmek gerekir: WebP her ortamda sorunsuz çalışmaz. E-posta istemcileri, bazı görüntü işleme pipeline'ları ve birkaç sosyal medya platformu WebP'yi desteklemez ya da yeniden kodlar. Web sayfalarında <picture> etiketi aracılığıyla PNG fallback eklemek bu durumu yönetir. Mevcut JPEG veya PNG dosyalarını WebP lossless formatına dönüştürmek için format dönüştürme aracını kullanabilirsiniz; çıktı formatı olarak WebP seçildiğinde lossless mod etkin olur.
E-ticaret ürün görselleri ve logo varlıkları için WebP lossless özellikle uygundur: PNG'nin şeffaflık desteğini korur, boyutu küçülür, piksel verisi değişmez.
Hangi tekniği seçeceğiniz büyük ölçüde kaynak dosyanın durumuna bağlıdır. Hiç optimize edilmemiş kamera çıkışı JPEG'lerde metadata temizleme ve progressive kodlama birlikte bazen %15-20 kazanım sağlar. PNG dosyalarında indexed color dönüşümü (uygun içerik türlerinde) ve lossless recompression kombinasyonu çok daha büyük fark yaratabilir. WebP lossless ise PNG'ye makul bir fallback stratejisi kurulabilecek ortamlarda en verimli lossless seçenektir.
Halihazırda bir optimizasyon pipeline'ından geçmiş görsellerde bu adımların getirileri küçük olacaktır. Lossless kazanımın büyük bölümü, kaynağın daha önce optimize edilmemiş olmasına bağlıdır. Site performans analizinde büyük veya optimize edilmemiş görsel varlıkları tespit etmek, nereden başlanacağına karar vermede iyi bir başlangıç noktasıdır.