Blog / Mühendislik

Restore edilen fotoğraf neden taramadan daha büyük bir dosya olabilir

· ölçüm yazısı · veri: üretim kodlayıcı karşılaştırması

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.

8211024
Yükleme0.84 MP
20522560
Restore edilmiş çıktı5.25 MP
Şekil 1. Aynı restorasyonun girişi ve çıktısı, ölçekli çizilmiş. Çıktı, yüklenenin 6.25 katı piksel taşıyor.

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.

Şekil 2. Aynı restore edilmiş pikseller, iki biçimde kodlanmış. Uyarlanabilir filtrelemeyle en yüksek sıkıştırmalı kodlama dosyayı sıfır kalite farkıyla %45 küçülttü; PNG her iki durumda da kayıpsız.

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.