Blog / Engineering

Warum ein restauriertes Foto größer sein kann als der Scan

· Messbericht · Daten: Encoder-Vergleich in der Produktion

Eine Beobachtung eines Nutzers stand am Anfang: Der restaurierte Download war größer als das hochgeladene Foto, was sich für eine „Reparatur“ intuitiv falsch anfühlt. Die Messung fand zwei unabhängige Ursachen: Die eine ist das Produkt, das wie vorgesehen arbeitet, die andere war echte Verschwendung, die wir dann beseitigt haben.

Ursache 1: Die Ausgabe trägt wirklich ~6× so viele Pixel

Die Restaurierung umfasst eine Verbesserung des ganzen Bildes: Ein typischer 821×1024-Scan (0,84 Megapixel) kommt mit 2052×2560 (5,25 Megapixel) zurück, das 6,25-Fache der Pixelzahl, mit echten synthetisierten Details in diesen Pixeln, keine gestreckten Kopien. Mehr Information, mehr Bytes. Dieser Teil ist das Feature.

8211024
Upload0,84 MP
20522560
Restaurierter Output5,25 MP
Abbildung 1. Input und Output derselben Restaurierung, maßstabsgetreu gezeichnet. Der Output trägt 6,25× so viele Pixel wie der Upload.

Ursache 2: Browser-PNG-Encoder sind 20–40 % aufgebläht

Der verschwenderische Teil: Die App kodierte Downloads ursprünglich im Browser mit dem eingebauten PNG-Encoder der Canvas-API. Verglichen mit einem richtigen optimierenden Encoder auf maximalen verlustfreien Einstellungen erzeugte der Canvas-Encoder 20–40 % größere Dateien für pixelidentische Ausgaben. PNG ist so oder so verlustfrei; die zusätzlichen Bytes brachten nichts.

Abbildung 2. Dieselben restaurierten Pixel, auf zwei Arten kodiert. Kodierung mit maximaler Kompression und adaptiver Filterung verkleinerte die Datei um 45 % ohne jeden Qualitätsunterschied; PNG ist in beiden Fällen verlustfrei.

Der Server kodiert das Ergebnis-PNG jetzt einmal mit maximaler verlustfreier Kompression, und der Client verwendet genau diese Bytes für den Download wieder, statt sie durch das Canvas neu zu kodieren. Die Wiederverwendung ist per Konstruktion korrekt: Der heruntergeladene Blob ist derselbe, aus dem das Canvas gezeichnet wurde, die Pixel können sich also nicht unterscheiden.

Was wir bewusst nicht getan haben

Wir haben keine verlustbehafteten Ausgabeformate hinzugefügt, um einer kleineren Zahl nachzujagen. Eine Restaurierung ist eine Archivkopie, deshalb gibt dir der Download-Button PNG und sonst nichts; in JPEG oder WebP gibt es keinen kostenlosen verlustfreien Gewinn mehr abzuholen. Und Fotos, die im On-Device-Fallback-Modus verarbeitet werden, behalten den Browser-Encoder; diese Läufe berühren unsere Server überhaupt nicht.

Praktische Erkenntnis

Wenn deine restaurierte Datei größer ist als dein Scan, prüfe ihre Pixelmaße, bevor du Verschwendung annimmst: Bei 6× so vielen Pixeln ist eine etwas größere Datei das erwartete Ergebnis, und eine kleinere würde bedeuten, dass Details weggeworfen wurden.