BMP'den PNG'ye Dönüşüm Neden Kayıpsız Kalır?
4 dk okuma
Aynı görüntü, çok farklı iki dosya
Bir BMP dosyasını PNG'ye dönüştürdüğünüzde ilginç bir şey olur: dosya belirgin biçimde küçülür ama görüntüde tek bir piksel bile değişmez. Bunu ilk kez görenlerin çoğunda haklı bir şüphe oluşur — bir şeyi küçültüyorsanız bir şeyden vazgeçmeniz gerekmez mi?
Cevap hayır, ve bu yazı tam olarak nedenini anlatıyor.
İki tür sıkıştırma vardır
Kafa karışıklığının kaynağı, "sıkıştırma" kelimesinin iki tamamen farklı işlem için kullanılmasıdır.
Kayıplı sıkıştırma, veriyi azaltarak yer kazanır. JPG'nin yaptığı budur: insan görme sisteminin özelliklerinden yararlanarak, gözün fark etmesi zor olan bilgileri hesaplar ve atar. Dosya çok küçülür, ama atılan veri kalıcı olarak gitmiştir. JPG'yi tekrar açıp başka bir formata kaydetmek o veriyi geri getirmez.
Kayıpsız sıkıştırma, veriyi azaltmaz; sadece aynı veriyi daha kısa bir şekilde ifade eder. Bunu bir metin örneğiyle düşünmek kolaydır: "aaaaaaaaaa" yazmak yerine "10 tane a" yazarsanız daha az yer kaplarsınız ama hiçbir bilgi kaybetmezsiniz. Açtığınızda orijinali tam olarak geri kurabilirsiniz.
PNG ikinci gruptadır. BMP de kayıpsızdır — sadece hiç sıkıştırma yapmaz. Yani BMP'den PNG'ye geçiş, kayıpsızdan kayıpsıza bir geçiştir ve buradaki tek değişiklik verinin nasıl paketlendiğidir.
BMP neden hiç sıkıştırmıyor?
BMP'nin tasarım felsefesi basitlik üzerine kuruludur. Dosya kısa bir başlık bloğuyla başlar, ardından piksel değerleri sırayla yazılır. Görüntüde ne olduğunun dosya boyutuna hiçbir etkisi yoktur; boyut tamamen genişlik, yükseklik ve bit derinliğinin çarpımıdır.
Bunun somut sonucu şudur: tamamen düz beyaz bir kare ile aynı boyutlardaki karmaşık bir fotoğraf, BMP olarak neredeyse aynı yeri kaplar. İçerikteki tekrar, düzen veya sadelik hiç değerlendirilmez.
Spesifikasyonda RLE adında bir sıkıştırma tanımlıdır ama pratikte neredeyse hiç kullanılmaz ve yalnızca düşük bit derinlikleri için geçerlidir. Karşınıza çıkan BMP dosyalarının ezici çoğunluğu ham hâldedir.
Bu basitliğin bir gerekçesi vardı: kod çözme gerektirmemek. Çok kısıtlı bir işlemci bile bir BMP'yi doğrudan okuyup ekrana basabilir. Bugün bu avantaj yalnızca gömülü sistemler ve endüstriyel cihazlar için anlamlı; masaüstünde ve web'de tamamen değersizdir.
PNG aynı pikselleri nasıl küçültüyor?
PNG'nin yaptığı iş iki aşamalıdır ve ikisi de bilgiyi korur.
Birinci aşama: tahmin. PNG her pikseli olduğu gibi yazmak yerine, komşusundan ne kadar farklı olduğunu yazar. Görüntülerde komşu pikseller genellikle birbirine çok benzer olduğu için bu farklar küçük sayılardır ve küçük sayılar daha az yer kaplar. Örneğin bir gökyüzü fotoğrafında yatay olarak ilerlerken renk çok yavaş değişir; PNG bu yavaş değişimi "neredeyse aynı" olarak ifade edebilir.
İkinci aşama: örüntü sıkıştırma. Elde edilen fark verisi üzerinde genel amaçlı bir kayıpsız sıkıştırma çalıştırılır. Bu aşama tekrar eden dizileri bulur ve kısaltır. Bir ekran görüntüsündeki gri araç çubuğu, bir logodaki düz renk alanı, bir diyagramdaki beyaz arka plan — bunların hepsi burada büyük kazanç sağlar.
İki aşamanın da ortak özelliği geri döndürülebilir olmasıdır. Dosyayı açtığınızda işlemler ters yönde çalıştırılır ve orijinal piksel değerlerinin tamamı geri kurulur.
Bu, pratikte ne anlama geliyor?
Orijinali saklamanız gerekmez. BMP'yi PNG'ye dönüştürdükten sonra PNG, BMP'nin taşıdığı bütün bilgiyi içerir. Kaynak dosyayı arşivlemenin bir bilgi avantajı yoktur. Tek istisna, dosyayı yalnızca BMP kabul eden bir programa vermeniz gerekmesidir.
Kalite endişesi yoktur. Kalite ayarı seçmenize, ayar denemeleri yapmanıza, sonucu yakınlaştırıp artefakt aramanıza gerek yok. Sonuç zaten kaynağın aynısı.
Tekrarlanan işlemler bozulma biriktirmez. JPG'de bir dosyayı açıp kaydetmek her seferinde biraz daha bozulma ekler. PNG'de böyle bir birikim yoktur; dosyayı yüz kere açıp kaydetseniz görüntü değişmez. Bu, üzerinde çalışılacak dosyalar için önemli bir güvencedir.
Kazanç içeriğe bağlıdır. Ekran görüntüleri, arayüz kayıtları, logolar, diyagramlar ve taranmış metinler PNG'de çarpıcı biçimde küçülür. Gürültülü ve yoğun dokulu fotoğrafik içerikte kazanç daha ölçülü olur, çünkü PNG'nin bulabileceği örüntü azdır. Böyle bir durumla karşılaşırsanız içeriğinizin aslında fotoğrafik olduğunu ve paylaşım amacıyla JPG'nin daha uygun bir hedef olabileceğini düşünün.
Sıkıştırma bellekte de geçerli mi?
Sık sorulan bir soru: PNG açıldığında da mı küçük?
Hayır. Sıkıştırma yalnızca diskteki temsili ilgilendirir. Bir görüntüyü açtığınızda program dosyayı çözer ve pikselleri belleğe ham hâlde yerleştirir; o noktada bellekte kapladığı yer BMP ile aynıdır. PNG'nin avantajı depolama ve aktarım tarafındadır: daha az disk alanı, daha hızlı indirme, e-postaya sığan dosyalar.
Özetle
BMP ve PNG aynı bilgiyi saklayan iki formattır; farkları bu bilgiyi nasıl yazdıklarıdır. BMP her şeyi ham hâlde yazar, PNG ise örüntüleri kullanarak aynı şeyi çok daha kısa ifade eder. Aradaki dönüşümde hiçbir veri atılmadığı için "ne kaybederim" sorusunun cevabı nettir: hiçbir şey. Kazandığınız ise disk alanı, taşınabilirlik ve her yerde çalışan bir format.
Sıkça Sorulan Sorular
Sıkıştırma yapılıyorsa nasıl kayıpsız olabiliyor?
Çünkü iki farklı sıkıştırma türü vardır ve bunları karıştırmak yaygın bir yanılgıdır. Kayıplı sıkıştırma, gözün az fark ettiği bilgileri hesaplayıp atarak yer kazanır ve atılan veri geri gelmez. Kayıpsız sıkıştırma ise hiçbir bilgiyi atmaz, sadece aynı bilgiyi daha kısa bir şekilde ifade eder. PNG ikinci gruba girer: tekrar eden desenleri ve komşu piksellerin benzerliğini kullanarak veriyi yeniden yazar, açtığınızda ise orijinalin tamamını geri kurar.
PNG dosyası açıldığında bellekte de küçük mü oluyor?
Hayır, sıkıştırma yalnızca diskteki temsili ilgilendirir. Bir PNG dosyasını açtığınızda program dosyayı çözer ve pikselleri belleğe ham hâlde yerleştirir; bu noktada bellekte kapladığı yer BMP ile aynıdır. Yani PNG'nin avantajı depolama ve aktarım tarafındadır: daha az disk alanı, daha hızlı yükleme, daha kolay paylaşım. Görüntüleme performansı açısından iki format arasında pratikte anlamlı bir fark yaşamazsınız.
PNG'yi tekrar BMP'ye çevirirsem orijinal dosyayla aynı mı olur?
Piksel verisi açısından evet, ama dosyalar bayt bayt aynı olmayabilir. Görüntünün her pikselinin renk değeri korunur, dolayısıyla görsel olarak ve veri olarak tam eşleşme sağlanır. Ancak dosya başlıkları, bit derinliği düzeni, satır dolgusu ve varsa meta veriler farklı yazılabilir. Yani sonuç aynı görüntüdür ama iki dosyanın karşılaştırma programında birebir eşleşmesini beklemeyin.
Aynı görüntünün PNG hâli ne kadar küçük olur?
Bu tamamen görüntünün içeriğine bağlıdır ve sabit bir oran vermek mümkün değildir. Düz renk alanları, tekrar eden desenler ve sınırlı renk paleti içeren görsellerde — ekran görüntüleri, logolar, diyagramlar gibi — kazanç çok belirgindir. Gürültülü, yoğun dokulu veya fotoğrafik içerikte ise PNG'nin bulacağı örüntü azdır ve küçülme daha ölçülü kalır. Yine de sıkıştırılmamış bir BMP karşısında PNG neredeyse her zaman kayda değer ölçüde küçüktür.
Bu konuyu BMP → PNG Dönüştür aracıyla hemen deneyin.
BMP → PNG Dönüştür aracını dene