Restore edilen fotoğraf neden taramadan daha büyük bir dosya olabilir
Bunu bir kullanıcı gözlemi başlattı: restore edilmiş indirme, yükledikleri fotoğraftan daha büyüktü; bu da bir “onarım” için sezgisel olarak yanlış geliyor. Ölçüm iki bağımsız neden buldu: biri ürünün amaçlandığı gibi çalışması, diğeri ise ardından kaldırdığımız gerçek bir israftı.
1. neden: çıktı gerçekten ~6× piksel taşıyor
Restorasyon tüm görüntü iyileştirmesini içerir: tipik bir 821×1024 tarama (0.84 megapiksel) 2052×2560 (5.25 megapiksel) olarak, yani 6.25× piksel sayısıyla geri gelir ve o piksellerde esnetilmiş kopyalar değil, gerçekten sentezlenmiş ayrıntı vardır. Daha fazla bilgi, daha fazla bayt. Bu kısım özelliğin kendisi.
2. neden: tarayıcı PNG kodlayıcıları %20–40 şişkin
İsraf kısmı: uygulama başlangıçta indirmeleri tarayıcıda, canvas API'sinin yerleşik PNG kodlayıcısıyla kodluyordu. En yüksek kayıpsız ayarlarda düzgün bir optimize edici kodlayıcıyla karşılaştırıldığında, canvas kodlayıcısı piksel piksel aynı çıktı için %20–40 daha büyük dosyalar üretti. PNG her iki durumda da kayıpsızdır; fazladan baytlar hiçbir şey satın almıyordu.
Sunucu artık sonuç PNG'sini en yüksek kayıpsız sıkıştırmayla bir kez kodluyor ve istemci, canvas üzerinden yeniden kodlamak yerine indirme için tam olarak o baytları yeniden kullanıyor. Yeniden kullanım yapısı gereği doğru: indirilen blob, canvas'ın boyandığı blob'un aynısı, dolayısıyla pikseller farklı olamaz.
Bilerek yapmadığımız şey
Daha küçük bir sayı peşinde koşmak için kayıplı çıktı formatları eklemedik. Bir restorasyon arşiv kopyasıdır, bu yüzden indirme düğmesi sana PNG verir, başka bir şey değil; JPEG ya da WebP'de toplanacak bedava bir kayıpsız kazanç kalmadı. Cihaz üstü yedek modda işlenen fotoğraflar ise tarayıcı kodlayıcısını korur; o çalıştırmalar sunucularımıza hiç dokunmaz.
Pratik çıkarım
Restore edilmiş dosyan taramandan büyükse, israf olduğunu varsaymadan önce piksel boyutlarına bak: 6× piksel ile biraz daha büyük bir dosya beklenen sonuçtur ve daha küçük bir dosya, ayrıntının atılmış olduğu anlamına gelirdi.