Gemessen, nicht versprochen
Leistung
Jede Zahl auf dieser Seite stammt von echten Fotos auf einem gewöhnlichen Laptop (Apple M3, 16 GB), und die Skripte, die sie erzeugt haben, liegen im Repository, sodass jeder sie wiederholen kann. Unter jedem Diagramm steht, was es für deine Abzüge bedeutet, und am Ende die Begriffe hinter den Zahlen.
Warum Fotollection schnell ist
Keine Magie. Ein paar Entscheidungen, getroffen vor der ersten Zeile Code, jede gemessen.
Nativer Code auf jedem Kern
Die Arbeit von Fotollection läuft in Rust, kompiliert für deinen Prozessor und verteilt auf alle seine Kerne, mit den Vektorbefehlen (SIMD), die Prozessoren für Pixel bieten.1,2,3
23,5 / sexportierte Fotos mit 16 MP
Nur, was nötig ist
Beim Öffnen eines Ordners werden die EXIF-Daten jeder Datei und ihr kleines eingebettetes Vorschaubild gelesen, nie das ganze Foto. Die Vorschaubilder liegen in einem Cache auf der Festplatte.4
0,12 sum 1.000 Fotos zu öffnen
Nie mehr Pixel als der Bildschirm
Eine Vorschau hat höchstens 1.600 px und entsteht aus einer Kopie mit 2.048 px im Speicher. Das ganze Foto wird erst gelesen, wenn du hineinzoomst, und zwar Stück für Stück.
17 msum eine Vorschau neu zu zeichnen
Bereit, bevor du klickst
Sind die Vorschaubilder fertig, wird im Hintergrund für jedes Foto eine Vorschau vorbereitet und auf der Festplatte abgelegt, während ein Viertel des Speichers die Fotos rund um das auf dem Bildschirm hält.
27 msum ein beliebiges Foto zu öffnen
Nichts doppelt
Ein Farbregler ändert nur die Farbe, nie die Größe. Jeder Farbregler wird in eine einzige Tabelle mit 33 × 33 × 33 Farben eingerechnet, so kosten zehn Regler so viel wie einer.
2 msfür zehn Farbregler auf einer Vorschau
Speicher im Budget
Fotollection bearbeitet nur so viele Fotos in voller Größe gleichzeitig, wie sein Speicherbudget erlaubt, festgelegt nach dem größten Foto im Export.
1,45 GBSpitzenspeicher bei 5.035 Fotos
Encoder, per Messung abgestimmt
Druckdateien verzichten auf eine Tabellenoptimierung, die sie um weniger als 1 % kleiner machte und ein Drittel der Kodierzeit kostete.
−33 %Kodierzeit für Druckdateien
Die Grafikkarte beim Bearbeiten
Während sich ein Farbregler bewegt, zeichnet die Grafikkarte aus der Tabelle, die der Kern erstellt. Exporte bleiben auf dem Prozessor, so ist ein Abzug auf jedem Computer identisch.
1–2 mspro Reglerschritt, statt 26 ms
Bis zu 20× schneller. Eine neue Art, den Speicher zu nutzen.
v0.11.0 denkt neu, wie Fotollection deine Fotos bereithält. Die Vorschau jedes Fotos wird im Hintergrund vorbereitet, sobald sein Vorschaubild fertig ist, und auf der Festplatte abgelegt, ein Viertel des Speichers deines Computers hält die Fotos rund um das, das du siehst, und das Foto auf dem Bildschirm kommt immer zuerst. Das Ergebnis: Jedes Foto, nah oder fern, JPEG oder RAW, öffnet sich in 27 Millisekunden. Ein RAW öffnet sich bis zu 20-mal schneller als in v0.9.0, ein JPEG 10-mal schneller, gemessen an denselben 422 Fotos einer Reise.5,6
Vorher: jedes Foto beim Klick dekodiert
Bis v0.10.0 wurde eine Vorschau erst gemacht, wenn du sie angefordert hast: Datei gelesen, Foto dekodiert (ein RAW entwickelt), aufgerichtet, auf 2.048 px gebracht und nach sRGB umgewandelt, dann zugeschnitten, gefärbt, gestempelt und für den Bildschirm kodiert. Bei einem 20-MP-Foto aus einer Lumix GX9 dauerte das 274 bis 278 ms für ein JPEG und 440 bis 531 ms für ein RAW, jedes Mal, wenn ein Foto geöffnet wurde, das nicht unter den letzten acht war. Schnell genug für ein Foto, nicht aber, um durch eine Reise zu blättern.
Standardvorschauen, wie Lightroom sie anlegt
Seit v0.11.0 ist die Arbeit, auf die man wartet, erledigt, bevor man fragt. Sobald die Vorschaubilder eines Ordners fertig sind, macht Fotollection im Hintergrund von jedem Foto eine Kopie mit 2.048 px, ein Foto pro Thread nach dem anderen, und legt sie neben den Vorschaubildern auf der Festplatte ab, als JPEG von etwa 0,66 MB (etwa 280 MB für die ganze Reise). Ein Klick auf irgendein Foto, nah oder fern, in dieser Sitzung oder der nächsten, beginnt mit dieser Kopie: 27 ms für ein JPEG wie für ein RAW. Übrig bleibt die eigene Arbeit der Vorschau (Zuschnitt, Größenänderung, Farbe, Datumsstempel und Kodierung), dieselben 27 ms wie aus dem Arbeitsspeicher. Eine Vorschau aus der Kopie auf der Festplatte weicht von einer frisch gemachten im Mittel um 1,35 von 255 Stufen ab, zu wenig, um es zu sehen.8
Speicher gut genutzt, nicht so wenig wie möglich
Ein Fotobetrachter, der auf einem Laptop mit 16 GB acht Fotos im Speicher hält, verschwendet den Laptop. Fotollection gibt der Vorschau jetzt ein Viertel des Arbeitsspeichers (auf einem Mac mit 16 GB etwa 190 Fotos mit 2.048 px, 20 RAW-Entwicklungen, die für ihre Regler bereitgehalten werden, und 600 MB für den Zoom), in Bytes gezählt und die ältesten zuerst freigegeben. Ist ein Foto auf dem Bildschirm, werden auch die nächsten zwei in der Richtung, in die du dich bewegst, und das eine dahinter geladen, so warten die Pfeiltasten nie. Die Obergrenze von 2 GB gilt für Exporte weiterhin.
Das Foto auf dem Bildschirm geht vor
Es wird immer nur ein RAW gleichzeitig entwickelt, damit ein Stapel RAW-Fotos in den Speicher passt. Früher war die Reihenfolge der Warteschlange Glückssache: Eine Vorschau in Vorbereitung, die Größenschätzung des Exports oder ein Export konnten das angeklickte Foto warten lassen. Jetzt sagt jede Entwicklung, wer auf sie wartet, und Arbeit im Hintergrund tritt zur Seite, wann immer das Foto auf dem Bildschirm eine braucht. Dieselbe Arbeit brachte auch zwei seltene Hänger ans Licht, die jetzt beseitigt sind: einen, bei dem jeder Thread auf eine Entwicklung wartete, für die kein Thread mehr frei war, und einen, bei dem der Bildschirm auf ein Bild wartete, das er nie angefordert hatte.
| Version | JPEG p50 / p95 | RAW p50 / p95 | Wie |
|---|---|---|---|
| v0.9.0 | 274 / 286 ms | 531 / 550 ms | Beim Klick dekodiert; RAW über macOS |
| v0.10.0 | 278 / 293 ms | 440 / 471 ms | Beim Klick dekodiert; RAW über unsere eigene Entwicklung |
| v0.11.0 | 27 / 32 ms | 27 / 30 ms | Aus der Standardvorschau auf der Festplatte oder aus dem Arbeitsspeicher |
Gemessen an der Prag-Reise des Autors (396 JPEG und 26 RAW, 20 MP) auf einem Apple M3 mit measure_browse: v0.9.0 aus seinem eigenen Tag gebaut, v0.10.0 auf seinem Code direkt vor dieser Änderung.
Tempo: tausend Fotos im Handumdrehen
Beim Öffnen eines Ordners werden die EXIF-Daten jedes Fotos und sein kleines eingebettetes Vorschaubild gelesen, nicht das ganze Bild, und eine geänderte Einstellung zeichnet nur die Vorschau neu. Natives Rust schlägt auch einen Webbrowser bei derselben Aufgabe: dasselbe Exporttempo, eine schnellere Vorschau und ein Viertel weniger Speicher.9
Was passiert, wenn du einen Ordner öffnest
Ein Ordner mit Fotos wird nicht ganz gelesen. Von jeder Datei liest Fotollection die EXIF-Daten (Datum, Kamera, Ort) und das kleine Vorschaubild, das jede Kamera in der Datei ablegt, und sonst nichts: 1.000 Fotos brauchen 0,12 s, bei einem Budget von 1 s, das festgelegt wurde, bevor der Code geschrieben war. Schärfere Vorschaubilder mit 400 px entstehen danach im Hintergrund, auf zwei Threads, damit Fotollection flink bleibt, und kommen in einen Cache auf der Festplatte, so ist ein wieder geöffneter Ordner sofort da. Bei 5.035 Fotos dauerte der Import 383 ms und die eingebetteten Vorschaubilder 236 ms.
Wohin die 17 ms einer Vorschau gehen
Eine geänderte Einstellung rendert die Vorschau aus einer Kopie des Fotos mit 2.048 px neu, die im Arbeitsspeicher liegt, nie aus der ganzen Datei. Von den 16,7 ms, die das dauert, entfallen 9,7 ms auf Zuschnitt und Verkleinern mit einem Lanczos-Filter, unter 0,1 ms auf den Datumsstempel und 7,0 ms auf das Kodieren der Vorschau als JPEG für den Bildschirm. Dieser Encoder wurde durch Messen abgestimmt: Mit den Einstellungen des Exports (volle Farbauflösung und optimierte Tabellen) brauchte er 16,2 ms; der Bildschirm braucht sie nicht, also nutzt die Vorschau halbierte Farbe und einfache Tabellen, während Exporte die volle Farbe (4:4:4) behalten. Ein günstigerer Verkleinerungsfilter wurde probiert und war auf diesem Prozessor langsamer (12,5 ms), also blieb es bei Lanczos.
Nativer Code gegen einen Browser
Dieselbe Aufgabe (dekodieren, auf 2:3 zuschneiden, Datumsstempel, JPEG mit Qualität 95) lief mit denselben 95 Fotos in Fotollection und in Chromium mit einem Worker pro Kern. Das Exporttempo kam gleich heraus, 18,0 gegenüber 17,9 Fotos pro Sekunde, was unsere erste Vermutung widerlegte: Ein Browser ist nicht langsam. Die Gründe für nativen Code liegen woanders: Fotollection schreibt 4:4:4-Dateien in voller Farbauflösung, wo der Encoder des Browsers die Farbe halbiert, es behält das Farbprofil jedes Fotos, es schreibt Dateien direkt auf die Festplatte, und es brauchte ein Viertel weniger Speicher (1,35 GB gegenüber 1,78 GB). Seitdem wurde der Druck-Encoder noch schneller: 23,5 Fotos pro Sekunde bei 16 MP.
Die Grafikkarte beim Bearbeiten, jeder Kern für Exporte
Während du einen Farbregler ziehst, zeichnet die Grafikkarte den Look aus derselben Tabelle, die der Kern von Fotollection erstellt, und sobald du loslässt, übernimmt die exakte Berechnung. Exporte bleiben auf dem Prozessor, so wird ein Abzug auf jedem Computer gleich.
Zehn Regler zum Preis von einem
Jeder Farbregler (Helligkeit, Kontrast, Wärme, Sättigung, Verblassen, getönte Tiefen und Lichter, Schwarzweiß) wird in eine einzige Tabelle aus 33 × 33 × 33 Farben eingerechnet, 35.937 Punkte, die sagen, wohin jede Farbe geht. Sie auf ein Foto anzuwenden heißt, für jedes Pixel seine Zelle in der Tabelle zu finden und zwischen vier ihrer Ecken zu interpolieren (tetraedrische Interpolation), so kosten zehn Regler so viel wie einer. Die Tabelle mit allen gesetzten Reglern zu bauen dauert etwa 2,6 ms; sie auf eine Vorschau von 1.600 px anzuwenden unter 2,2 ms, auf einen Export mit 24 MP etwa 24 ms.
Warum sich ein Ziehen trotzdem langsam anfühlte und was die Grafikkarte änderte
Schritt für Schritt gemessen kostete eine Bewegung eines Reglers etwa 26 ms, und die Farbe selbst war davon nur 2 ms: Der Rest war das Kodieren der Vorschau als JPEG (7 bis 11 ms) und das erneute Dekodieren im Fenster (9 bis 15 ms). Die Grafikkarte nimmt beides weg. Wenn ein Ziehen beginnt, gehen die einfache Vorschau und eine Maske, die zeigt, wo das Foto ist (nicht der Datumsstempel, der Rahmen oder der Rand), einmal an die Grafikkarte; bei jedem Schritt folgt nur die neue Tabelle, und ein kleines WebGL2-Programm interpoliert sie, genau wie der Kern: 1 ms pro Schritt im WebKit von macOS, 2 ms in Chromium. Lässt du los, ersetzt das exakte Rendering des Kerns das Bild. Beide wurden an einem kräftigen Look verglichen, bei dem jeder Regler bewegt war: Sie unterscheiden sich im Mittel um 0,13 in ΔE2000 und um 0,77 im 99. Perzentil, weit unter der 1, die ein Auge im direkten Vergleich sieht.
Kein Schalter ist nötig. Beim ersten Ziehen prüft Fotollection selbst: Gibt es kein WebGL2, ist der Renderer ein Software-Renderer oder dauert ein Testschritt 8 ms oder länger, bleibt es für die Sitzung beim Weg über den Prozessor. Ein Software-Renderer brauchte im Test 16,5 ms pro Schritt, also ist es richtig, dort beim Prozessor zu bleiben.
Exporte auf jedem Kern
Dekodieren und Kodieren eines Fotos laufen jeweils auf einem Kern, so ist ein Export schnell, wenn an mehreren Fotos gleichzeitig gearbeitet wird. Wie viele, hängt vom Arbeitsspeicher ab: Bei Fotos mit 24 bis 26 MP ergaben 2 gleichzeitig 4,9 Fotos pro Sekunde, 4 ergaben 9,4, 6 ergaben 11,5 und 8 ergaben 12,5, wobei der Speicher von 0,49 auf 1,21 GB stieg. Fotollection wählt die Zahl aus einem Speicherbudget von 1,6 GB und der Größe des größten Fotos und hört bei 6 auf, weil 8 gleichzeitig bei den Fotos einer echten Reise nicht schneller waren und 0,2 GB mehr brauchten. Exporte nutzen nie die Grafikkarte: Ein Abzug muss auf jedem Computer gleich herauskommen, und die Tests, die Exporte Byte für Byte vergleichen, hängen davon ab.
Eine echte Reise: 422 Dateien aus Prag
Testsätze können schmeicheln, darum hier ein Ordner genau so, wie er nach einem Wochenende in Prag von einer Lumix GX9 kam: 396 JPEGs mit 20 MP, je etwa 11 MB, und 26 RAW-Dateien daneben, insgesamt 4,7 GB. Beim Öffnen werden die EXIF-Daten jeder Datei in 0,23 Sekunden gelesen. Die Vorschau wird in 19 ms neu berechnet, ein RAW in 0,35 Sekunden entwickelt, und zehn Postkarten werden in 21 ms neu gezeichnet. Am 2026-11-03 verfehlten zwei Werte bei diesen großen Dateien ihr Budget: Der Export schaffte 7,6 Fotos pro Sekunde, und der Speicher lag in der Spitze bei 2,14 GB. Die Ursache wurde gefunden und in v0.9.7 behoben: Die JPEGs werden jetzt mit 10,1 pro Sekunde exportiert, und der ganze Lauf bleibt unter 1,31 GB.10,11
Zwei Budgets verfehlt und die Ursache gefunden
Bei diesen 20-MP-Dateien verfehlte der erste Durchlauf zwei Budgets: Der Export lief mit 7,6 Fotos pro Sekunde, und der Speicher erreichte in der Spitze 2,14 GB, über der Obergrenze von 2 GB. Die Zeitmessung jeder Stufe eines Fotos zeigte, wohin sie ging: Dekodieren etwa 100 ms, Zuschneiden 2 ms und Kodieren des Abzugs 203 ms. Der Druck-Encoder optimierte seine Tabellen in einem zweiten Durchgang, der jeden Koeffizienten des Bildes im Speicher hielt, etwa 160 MB pro Foto, bei sechs Fotos gleichzeitig etwa 1,5 GB, für Dateien, die nur 0,9 % kleiner waren. Mit den Standardtabellen schreibt er die Datei in Streifen: 138 ms, derselbe Fehler gegenüber dem gerenderten Bild, ein paar Kilobyte mehr.
Ein Teil des Speichers gehörte gar nicht zu Fotollection. Der Benchmark machte seine Vorschaubilder auf jedem Kern, wo Fotollection zwei Hintergrund-Threads nutzt, und hielt seine eigenen Vorschaumessungen während des Exports am Leben; so gemessen, wie Fotollection arbeitet, bleiben vor dem Start eines Exports 0,35 bis 0,39 GB. Seit v0.9.7 richtet sich die Zahl der gleichzeitig bearbeiteten Fotos auch nach dem größten Foto des Exports (weniger bei sehr großen), so bleibt die Spitze bei jeder Größe unter der Obergrenze: 10,1 Fotos pro Sekunde und 1,31 GB für diesen Ordner.
Speicher: 5.035 Fotos, und er bleibt flach
Fotollection hält pro Foto nur wenige Bytes im Speicher, schreibt Vorschaubilder in einen Cache auf der Festplatte und bearbeitet nur so viele Bilder in voller Größe gleichzeitig, wie in sein Speicherbudget passen. So bleibt der Speicher flach, auch wenn eine Reise auf Tausende Fotos wächst.
Warum der Speicher nicht mit dem Ordner wächst
Fotollection behält in seiner Bibliothek ein paar Bytes pro Foto (13 MB für 5.035 Fotos), schreibt Vorschaubilder in einen Cache auf der Festplatte, statt sie festzuhalten, hält eine begrenzte Zahl von Vorschauen im Arbeitsspeicher und bearbeitet nur so viele Fotos in voller Größe gleichzeitig, wie in sein Budget passen. Das Raster auf dem Bildschirm ist virtuell: Nur die Kacheln, die du sehen kannst, existieren. Zum Testen wurden dieselben 95 Fotos 53-mal in einen Ordner mit 5.035 Dateien verlinkt:
| 95 Fotos | 5.035 Fotos | |
|---|---|---|
| Import und EXIF | 5 ms, 7 MB | 383 ms, 13 MB |
| Vorschaubilder mit 400 px in den Festplatten-Cache | 47,8 Fotos/s | 46,4 Fotos/s |
| Export, 6 gleichzeitig | 18,0 Fotos/s | 15,4 Fotos/s, 0 fehlgeschlagen |
| Spitzenspeicher des ganzen Durchlaufs | 1,35 GB | 1,45 GB |
53-mal mehr Fotos kosten 0,1 GB mehr. Der lange Export ist pro Foto nur deshalb etwas langsamer, weil er länger als fünf Minuten lief und der Prozessor eines Laptops unter Dauerlast langsamer wird.
Druckqualität: Der Abzug sieht aus wie das Foto
Abzüge, die über einen Web-Editor entstehen, wirken oft flau: Er verwirft das Farbprofil, verkleinert das Foto auf 2.000 px und speichert mit Qualität 80 und halbierter Farbe. Fotollection behält das Profil und exportiert in voller Auflösung mit 4:4:4.
Warum Abzüge aus einem Web-Editor flau aussehen
Der Test exportiert 20 Kamerafotos und 5 Fassungen in Display P3 (die weitere Farbe neuerer Smartphones und Macs) über den echten Export von Fotollection, liest dann beide Dateien mit einem unabhängigen Decoder, rechnet sie über ihre Farbprofile nach CIELAB um und vergleicht sie Pixel für Pixel mit dem Original. Ein typischer Export aus einem Web-Editor durchläuft denselben Vergleich: Profil verworfen, auf 2.000 px verkleinert und für den Abzug wieder vergrößert, mit Qualität 80 und halbierter Farbe (4:2:0) gespeichert.
| Median | Fotollection, sRGB | Web-Editor | Fotollection, Display P3 | Web-Editor |
|---|---|---|---|---|
| ΔE2000 (Farbfehler, unter 1 unsichtbar) | 0,19 | 1,39 | 0,31 | 2,15 |
| PSNR | 52,6 dB | 37,9 dB | 50,8 dB | 37,0 dB |
| Erhaltene Sättigung | 100 % | 99,9 % | 99,9 % | 86,8 % |
| Erhaltenes feines Detail | 99,8 % | 13 % | 100 % | 18 % |
Zwei Ursachen erklären den flauen Eindruck. Das Verkleinern auf 2.000 px und erneute Vergrößern für das Labor wirft 87 % des feinen Details weg, das einen Abzug knackig wirken lässt. Und das Verwerfen des Farbprofils liest ein Foto in Display P3, als wäre es sRGB, was ihm 13 % seiner Sättigung nimmt. Fotollection behält das Profil (25 von 25 Dateien), exportiert in der vollen Auflösung des Fotos mit voller Farbe (4:4:4) bei Qualität 95 (so damals gemessen; seit v0.13.0 standardmäßig 90, noch immer unter einem sichtbaren Unterschied), und seine größeren Fehler liegen nur an scharfen Kanten, wo jedes JPEG am härtesten arbeitet. Noch ausstehend: echte HEIC-Dateien vom iPhone und Abzüge, die mit einem Spektralfotometer gemessen werden.
Kamera-RAW: öffnen, wie es ist
Fotollection öffnet RAW-Dateien von neun verbreiteten Kameras, wie sie sind, ohne Umwandeln und, unter Windows und Linux, ohne etwas zu installieren. Seit v0.10.0 ist das volle Bild für jede Kamera mit Bayer-Sensor seine eigene Entwicklung, erstellt aus den eigenen Daten der Kamera wie in einem RAW-Editor, während Adobe DNG Converter nur eine RAW-Datei in eine andere umwandelt.12,13,14,15
Was ein Sensor wirklich aufzeichnet
Der Sensor einer Kamera ist ein Raster aus Millionen winziger Mulden, den sogenannten Fotodioden. Solange der Verschluss offen ist, sammelt jede das Licht, das sie erreicht, und wandelt es in elektrische Ladung um; schließt er sich, macht ein Wandler aus jeder Ladung eine Zahl. Der Zusammenhang ist linear: Doppelt so viel Licht ergibt die doppelte Zahl. Unsere Augen sind überhaupt nicht linear, sie beurteilen Helligkeit im Verhältnis, und deshalb sieht eine RAW-Datei dunkel und flau aus, bis sie entwickelt ist.
Zwei Arten von Sensoren lesen dieses Raster aus:
- CCD (Charge-Coupled Device) schiebt die Ladung jeder Fotodiode Zeile für Zeile zu einem einzigen Verstärker am Rand des Chips. Es war der Sensor der ersten Digitalkameras und vieler früher Mittelformat-Rückteile: saubere Bilder, aber langsam ausgelesen und stromhungrig.
- CMOS gibt jeder Fotodiode einen eigenen Verstärker und liest viele von ihnen gleichzeitig. Es ist schneller, braucht weniger Strom und ist günstiger herzustellen, daher hat fast jede Kamera und jedes Smartphone heute einen. Die meisten CMOS-Sensoren lesen ihre Zeilen nacheinander aus, weshalb sich ein schnell bewegtes Motiv auf einem Foto mit elektronischem Verschluss neigen kann (der Rolling Shutter), und weshalb Stacked-Sensoren, die viel schneller auslesen, sich weniger neigen.
Die Zahlen haben weit mehr Stufen als ein JPEG. Eine Kamera speichert 12 oder 14 Bit pro Fotodiode, 4.096 oder 16.384 Stufen, wo ein JPEG 8 Bit behält, 256 Stufen. Diese zusätzlichen Stufen erlauben es, einen Schatten aufzuhellen oder einen hellen Himmel zurückzunehmen, ohne dass Streifen entstehen. Und kein Licht ist nicht null: Jeder Sensor addiert einen kleinen Versatz, den Schwarzwert, damit das Rauschen um Schwarz nicht abgeschnitten wird. Im Beispiel der Nikon D750 liegt Schwarz bei 600, und der hellste Wert, den der Sensor halten kann, der Weißwert, bei 15.520. Das Allererste, was jeder RAW-Entwickler tut, ist, diese beiden Zahlen auf 0 und 1 zu bringen, für jede Position des Farbfilters, weil manche Kameras jeder ihren eigenen Schwarzwert geben.
Farbe kommt von einem Filter über jeder Fotodiode
Eine Fotodiode misst nur, wie viel Licht ankommt, nie seine Farbe. Um Farbe zu sehen, ist der Sensor mit einem Farbfilter-Array bedeckt: einem winzigen roten, grünen oder blauen Filter über jeder Fotodiode, sodass jede nur einen Teil des Spektrums zählt.
- Bayer, 1976 von Bryce Bayer bei Kodak patentiert, wiederholt ein Quadrat aus 2 × 2: ein Rot, zwei Grün, ein Blau. Die Hälfte der Fotodioden ist grün, weil unsere Augen den größten Teil ihres Sinns für Details aus der Mitte des Spektrums beziehen, so trägt Grün den Großteil der Schärfe. Fast jede Kamera nutzt dieses Muster, in einer von vier Ausrichtungen (RGGB, BGGR, GRBG, GBRG), die die Datei angeben muss.
- X-Trans, das Muster von Fujifilm seit 2012, wiederholt ein Quadrat aus 6 × 6 mit Rot, Grün und Blau in jeder Zeile und jeder Spalte. Seine unregelmäßige Anordnung macht Farbmoiré auf feinen, sich wiederholenden Details unwahrscheinlicher, sodass Fujifilm den Weichzeichnungsfilter weglassen kann, den viele Sensoren tragen, um den Preis einer schwierigeren Rekonstruktion.
- Andere Bauarten: Monochrom-Sensoren haben gar keinen Filter, so sieht jede Fotodiode volles Detail (die Monochrom-Kameras von Leica); der Foveon von Sigma stapelt drei Schichten, die Farbe in verschiedenen Tiefen des Siliziums aufnehmen; viele Smartphones fassen vier Fotodioden einer Farbe zusammen (Quad Bayer) und lesen sie bei wenig Licht als eine.
Ein Bayer-Sensor mit 24 MP zeichnet also 24 Millionen Zahlen auf, jede für eine einzige Farbe: Zwei der drei Farben jedes Pixels fehlen. Aus diesem Mosaik ein Bild zu machen, ist die Aufgabe des Demosaicing, unten.
Was eine RAW-Datei enthält
Ein JPEG ist ein fertiges Bild: Die Kamera hat schon jede Entscheidung getroffen. Eine RAW-Datei behält die Zahlen des Sensors von vor diesen Entscheidungen, mit allem, was nötig ist, um sie später zu treffen:
- die Messwerte selbst, einer pro Fotodiode, und unter welcher Filterfarbe jeder lag;
- Schwarz- und Weißwert;
- den aktiven Bereich (die Fotodioden, die Licht gesehen haben; ein paar Zeilen und Spalten an den Rändern sind absichtlich abgedeckt, um Schwarz zu messen) und den Standardzuschnitt der Kamera;
- den Weißabgleich, den die Kamera bei der Aufnahme gewählt hat;
- Farbmatrizen, die sagen, wie das eigene Rot, Grün und Blau dieses Sensors mit den Farben zusammenhängt, die Menschen sehen;
- eine Vorschau, ein JPEG, das die Kamera selbst gemacht hat, mit eigener Farbe und eigenem Tonwert, dazu die EXIF-Daten.
Jeder Hersteller hat sein eigenes Format, meist auf TIFF aufgebaut und teilweise undokumentiert: CR2 und CR3 (Canon), NEF (Nikon), ARW (Sony), RW2 (Panasonic), ORF (Olympus), RAF (Fujifilm). DNG ist das Format, das Adobe offen veröffentlicht (Version 1.7), genutzt von Ricoh, Leica, Pentax und vielen Smartphones, und dasjenige, dessen Regeln diese Seite folgt.
Fotollection liest DNG mit seinem eigenen Reader, geschrieben nach der Spezifikation, und die anderen Formate werden von rawler entpackt, einer LGPL-Bibliothek, die in Fotollection eingebaut ist. Die Vorschaubilder im Raster berühren die Sensordaten überhaupt nicht: Sie kommen aus der Vorschau in der Datei, in 9 bis 32 ms, und deshalb öffnet sich ein Ordner mit RAW-Dateien so schnell wie ein Ordner mit JPEGs.
Demosaicing: die zwei fehlenden Farben ermitteln
Die zwei fehlenden Farben jedes Pixels aus seinen Nachbarn wiederherzustellen, heißt Demosaicing, und dieser Schritt entscheidet mehr als jeder andere, wie scharf und wie sauber ein RAW-Foto aussieht. Jede Methode steht vor demselben Dilemma: Nachbarn zu mitteln ist in flachen Bereichen sicher, aber über eine Kante hinweg mischt es zwei verschiedene Flächen, die Kunst liegt also darin zu wissen, welche Nachbarn zusammengehören.
- Bilinear mittelt einfach die nächsten Fotodioden jeder Farbe. Es ist die Untergrenze, an der jede Methode gemessen wird: weich, und mit farbigen Säumen an jeder scharfen Kante, weil Rot, Grün und Blau über leicht verschiedene Stellen gemittelt werden.
- Malvar–He–Cutler (2004) beginnt mit diesem Mittelwert und korrigiert ihn mit dem Detail der Farbe, die die Fotodiode gesehen hat, über feste Filter aus 5 × 5. Es ist schärfer und noch immer sehr schnell. Fotollection hat bis v0.10.0 damit entwickelt.
- PPG (Patterned Pixel Grouping) entscheidet zuerst, in welcher Richtung sich das Bild am wenigsten ändert, und interpoliert nur entlang dieser Richtung. rawler nutzt es, und das taten auch die Windows- und Linux-Versionen von Fotollection für die meisten Formate bis v0.10.0.
- RCD (Ratio Corrected Demosaicing, von Luis Sanz Rodríguez) arbeitet mit Verhältnissen zwischen den Farben statt mit Differenzen, was in hellen wie dunklen Bereichen besser hält, und ist für wenige Artefakte auf feinem Detail bekannt; darktable und RawTherapee bieten es an.
- Markesteijn, nach Frank Markesteijn, ist die für X-Trans gemachte Methode, in einem Durchgang oder, langsamer und sauberer, in drei.
- Das Demosaicing von Fotollection seit v0.10.0 übernimmt von RCD die Art, die Richtung zu bestimmen, schätzt dann Grün von jeder Seite, korrigiert um die eigene Farbe der Stelle (wie es Hamilton und Adams taten), gewichtet danach, wie stark sich jede Seite ändert. Wir haben zuerst den eigenen Verhältnisschritt von RCD geschrieben, und er schnitt auf unseren Testbildern schlechter ab, also wird die Variante ausgeliefert, die gewonnen hat, unter ihrem eigenen Namen.
Wenn eine Methode falsch rät, zeigt sich das auf vier typische Arten:
- Zipper: eine Reihe abwechselnd heller und dunkler Pixel entlang einer scharfen Kante, wo die Methode Nachbarn von beiden Seiten gewählt hat;
- Labyrinth: ein feines, wurmartiges Muster in flachen Bereichen, wenn die zwei Grün eines Bayer-Quadrats nicht ganz gleich lesen (sie liegen auf Zeilen mit verschiedenen Nachbarn und weichen auf vielen Sensoren um ein oder zwei Prozent ab);
- Falschfarbe: farbige Punkte oder Säume auf Detail, das eigentlich grau ist, etwa Stoff, Haar, eine Backsteinmauer oder ein ferner Zaun;
- Moiré: farbige Wellen über sehr feinen, sich wiederholenden Mustern, feiner, als der Farbfilter abtasten kann.
Wie wir eine Methode beurteilen. Unsere Augen lassen sich von einem schärfer wirkenden Ergebnis leicht täuschen, deshalb wird jede Methode an Bildern bewertet, deren Wahrheit genau bekannt ist. Ein Computer zeichnet fünf Testbilder mit 768 px: eine Zonenplatte (Ringe, die zum Rand hin feiner werden, bis zum feinsten Detail, das die grünen Fotodioden halten können), einen Siemensstern mit 72 Speichen, Balken gesättigter Farbe auf Grau in drei Richtungen, weiche Farbverläufe und ein flaches Grau, dessen zwei Grün um 2 % abweichen. Jedes wird in das umgewandelt, was ein Bayer-Sensor aufzeichnen würde, demosaiciert und mit dem Original verglichen. PSNR misst den Gesamtfehler in Dezibel (höher ist besser; alle 6 dB halbieren ihn); Falschfarbe ist die mittlere Farbe, die auf den grauen Testbildern erscheint; der Kantenfehler ist der mittlere Fehler innerhalb von 2 px um eine Kante.
| Testbild (768 px) | Bilinear | Malvar (unseres bis v0.10.0) | Unseres seit v0.10.0 |
|---|---|---|---|
| Zonenplatte: PSNR, höher ist besser | 13,0 dB | 17,3 dB | 16,5 dB |
| Zonenplatte: Falschfarbe, niedriger ist besser | 65,9 | 43,0 | 18,7 |
| Siemensstern: PSNR | 21,3 dB | 25,2 dB | 37,9 dB |
| Siemensstern: Falschfarbe | 9,4 | 8,4 | 0,16 |
| Gesättigte Farbbalken: Fehler an den Kanten, niedriger ist besser | 11,6 | 21,6 | 10,5 |
| Weiche Verläufe: PSNR | 78,9 dB | 77,5 dB | 78,4 dB |
| Flaches Grau mit Grün-Abweichung: Labyrinth, niedriger ist besser | 0,38 | 0,38 | 0 |
| Textur mit Hotpixeln: verbleibend pro 10.000, niedriger ist besser | 35,8 | 66,5 | 0 |
Malvar ist auf feinem grauem Detail etwa 4 dB besser als bilinear, wie sein Paper verspricht, aber schlechter an Kanten zwischen kräftigen Farben, weil seine Korrektur das Detail einer Farbe für die anderen leiht und annimmt, dass sie sich gemeinsam ändern, was ein rotes Schild an einer grauen Wand nicht tut. Keine der beiden beseitigt das Labyrinth, das kein Problem des Demosaicing ist, sondern ein Unterschied zwischen den zwei Grün, der vorher ausgeglichen werden muss. Das sind die Lücken, die unsere Kette seit v0.10.0 schließt: Hotpixel und das Grün-Ungleichgewicht werden behoben, solange jede Stelle nur hält, was sie gemessen hat, das richtungsabhängige Demosaicing stellt die Farben wieder her, und ein kleiner Median auf den Farbdifferenzen entfernt die verbleibende Falschfarbe. Auf den Testbildern gewinnt es überall außer beim Gesamt-PSNR der Zonenplatte, 0,8 dB unter Malvar nahe dem feinsten Detail, wo jede Methode Aliasing zeigt; selbst dort halbiert sich seine Falschfarbe. Bei den neun echten Dateien bringt es die Entwicklung jeder Bayer-Kamera genauso nah oder näher an das eigene JPEG der Kamera und kostet bei 24 MP etwa 180 ms, gegenüber 40 bei Malvar: ein paar Zehntelsekunden mehr pro Foto, für Abzüge mit saubererem Detail.
Von den Farben der Kamera zu deinen
Rot, Grün und Blau der Kamera sind nicht die deines Bildschirms: Die Filter jedes Sensors nutzen eigene Farbstoffe, und sie überlappen anders als die Zapfen unserer Augen. Die Farbmatrizen in der Datei wandeln die Farben der Kamera in CIE XYZ um, das 1931 definierte Standardmodell des menschlichen Farbsehens, und von dort in sRGB, den Farbraum der meisten Bildschirme und der Fotolabore.
- Der Weißabgleich kommt zuerst: eine Verstärkung für Rot und für Blau, damit etwas Weißes in der Szene neutral herauskommt. Die Kamera speichert die Verstärkungen, die sie gewählt hat, und Fotollection wendet sie vor dem Demosaicing an, so bleiben die Farbdifferenzen, auf die sich die Methoden oben stützen, klein.
- Ein DNG trägt meist zwei Matrizen, eine unter warmem Glühlampenlicht gemessen und eine unter Tageslicht. Die richtige für dein Foto liegt dazwischen: Der Entwickler ermittelt das Licht der Aufnahme aus ihrem Weißabgleich, als Farbtemperatur, und mischt die beiden. Fotollection macht dasselbe für die anderen Formate, mit den Matrizen, die rawler für jedes Kameramodell kennt.
- All das geschieht in linearem Licht, auf der eigenen Skala des Sensors, vor jeder Kurve. Farben in linearem Licht zu mischen, zu skalieren und zu verkleinern ergibt physikalisch richtige Ergebnisse; nach der Kurve getan, verdunkelt es Kanten und verschiebt Farben.
Der Look der Kamera. Das eigene JPEG einer Kamera ist nicht neutral: Jeder Hersteller fügt seinen Kontrast, seine Farbe und seine Hauttöne hinzu, und dieser Look ist ein Teil dessen, warum Menschen eine Marke wählen. Seit v0.10.0 öffnet sich ein RAW-Foto mit einer neutralen Wiedergabe, treu zur Matrix des Sensors, mit der Vignettierungskorrektur und der Belichtung, die die Kamera gewählt hat; Like the camera’s JPEG ist einen Klick entfernt in der Karte RAW colour eines RAW-Fotos, für ein Foto oder für alle RAW auf einmal. (Bis v0.10.0 wurde jedes RAW an das JPEG der Kamera angepasst; ein damals gespeichertes Projekt behält diesen Look.) Diese Wahl passt das JPEG der Kamera auf beide Arten an, eine Kurve und eine Matrix oder eine Kurve pro Kanal, und behält, was für diese Datei näher kommt: Bei der Nikon D750 halbiert sie den Unterschied, von 2,26 auf 1,16 in ΔE2000. Die Vorschaubilder im Raster behalten die eigene Vorschau der Kamera, wie in Lightroom.
Tonwert: von linearen Zahlen zu einem Bild
Lineare Zahlen sehen auf einem Bildschirm dunkel und matt aus, weil eine Verdopplung des Lichts, die der Sensor als doppelte Zahl aufzeichnet, für uns wie eine Stufe Helligkeit aussieht. Eine Tonkurve macht aus der Skala des Sensors ein Bild: Sie legt das mittlere Grau fest, hebt die Tiefen an, lässt die Lichter sanft auslaufen, statt sie auf einmal abzuschneiden, und gibt dem Bild seinen Kontrast. Das Bild wird dann mit der sRGB-Kurve (seinem „Gamma“) gespeichert, die mehr der 256 Stufen eines JPEG für die Tiefen aufwendet, wo unsere Augen Stufen am meisten bemerken.
Zwei Korrekturen, die eine Kamera in ihrem JPEG vornimmt, stehen nicht in den RAW-Daten, und beide sind für Abzüge wichtig:
- Vignettierung: Jedes Objektiv ist zu den Ecken hin dunkler. Fotollection misst aus der eigenen Vorschau der Kamera, wie stark sie die Ecken aufgehellt hat, als radiale Verstärkung. Als unsere DNG-Entwicklung zum ersten Mal mit dem JPEG der Kamera verglichen wurde, war die Mitte etwa 4 L* zu hell und die Ecken 1,5 zu dunkel; die radiale Verstärkung brachte den Unterschied von ΔE 3,8 auf 2,67, mit jedem Bereich des Fotos innerhalb von ±0,5 L*.
- Verzeichnung: die leichte Tonnen- oder Kissenform eines Objektivs. Micro-Four-Thirds-Kameras (Panasonic, Olympus) sind darauf ausgelegt, dass die Kamera sie korrigiert, und ihre Dateien halten fest, wie. Auf einem Mac werden diese Dateien von macOS entwickelt, das die Korrektur anwendet; sie in unserer eigenen Entwicklung zu korrigieren, ist geplant (FR-085).
Wie Fotollection ein RAW entwickelt, Schritt für Schritt
Für eine vollständige Entwicklung, die hinter der Druckvorschau, dem Zoom und dem Export steht:
- Erkennen des Formats an den ersten Bytes der Datei, nie an ihrem Namen, so wird auch eine umbenannte Datei oder ein RAW, das wie ein einfaches TIFF aussieht, richtig gelesen.
- Lesen der Zahlen des Sensors: DNG mit unserem eigenen Reader, die anderen Formate von rawler entpackt. Eine zu große oder beschädigte Datei wird abgelehnt, bevor ein Pixel dekodiert wird, mit einem Fehlercode.
- Werte: Schwarz auf 0 und Weiß auf 1, für jede Position des Farbfilters, gezählt ab der Ecke des aktiven Bereichs.
- Weißabgleich, dann Demosaicing: zuerst Hotpixel und die Grün-Balance, das richtungsabhängige Demosaicing, der Median gegen Falschfarbe (Markesteijn für X-Trans kommt in v0.15.0).
- Farbe: die Matrizen der Kamera, gemischt für das Licht der Aufnahme, in linearem Licht.
- Tonwert und Look, angepasst an die Vorschau der Kamera, mit ihrer Vignettierungskorrektur.
- Ab hier ist ein RAW-Foto wie jedes andere: Zuschnitt, Datumsstempel, Rahmen, Druckformat und Farbprofil, exportiert in voller Auflösung in 4:4:4 mit Qualität 95.
Ein paar Regeln gelten durchgehend. Es läuft immer nur eine Entwicklung gleichzeitig, verteilt auf jeden Prozessorkern und nie auf dem eigenen Thread des Fensters, so reagiert Fotollection weiter, während ein 30-MP-Foto entwickelt wird. Exporte laufen immer auf dem Prozessor, so kommt ein Abzug auf jedem Computer gleich heraus; die Grafikkarte beschleunigt nur, was du beim Bearbeiten siehst. Und der Code ist unser eigener, geschrieben nach den veröffentlichten Spezifikationen und Papers, nicht aus anderen Projekten kopiert, und dann geprüft: an den synthetischen Testbildern oben, an neun RAW-Dateien von neun Kameras (CC0, von raw.pixls.us) und durch absichtlich abgeschnittene und beschädigte Dateien, damit eine schlechte Datei ein Fehler ist, nie ein Absturz.
Seit v0.10.0: unsere eigene Entwicklung für jede Bayer-Kamera. rawler entpackt nur die Dateien, der Rest ist von Fotollection. Vollständige Entwicklung der neun Beispieldateien, Median aus 3, auf demselben Laptop: unsere Entwicklung mit ihrem saubereren Demosaicing, gegenüber dem einfacheren von rawler und dem von macOS:
| Kamera (Format) | Fotollections eigene | rawler | macOS |
|---|---|---|---|
| Panasonic GX9 (RW2, 20 MP) | 280 ms | 216 ms | 436 ms |
| Panasonic S5 (RW2, 24 MP) | 442 ms | 301 ms | 1.044 ms |
| Olympus E-M10 III (ORF, 16 MP) | 308 ms | 364 ms | 1.164 ms |
| Sony A7 III (ARW, 24 MP) | 372 ms | 241 ms | 488 ms |
| Canon R10 (CR3, 24 MP) | 494 ms | 360 ms | 1.647 ms |
| Ricoh GR III (DNG, 24 MP) | 523 ms | 650 ms | — |
| Nikon D750 (NEF, 24 MP) | 502 ms | 402 ms | 412 ms |
| Canon 5D Mark IV (CR2, 31 MP) | 691 ms | 565 ms | 418 ms |
| Fujifilm X-T3 (RAF, 26 MP, X-Trans) | als Nächstes | 524 ms | 1.339 ms |
Unsere braucht für ihr saubereres Demosaicing und ihre angepasste Farbe eine Zehntel- bis Viertelsekunde mehr als die von rawler und bleibt bei den meisten Kameras schneller als macOS; sie geschieht einmal pro Foto, und ein Regler stellt danach eine bereitgehaltene Kopie in 4 bis 11 ms neu fertig. Auf einem Mac bleiben die Dateien von Panasonic und Olympus wegen der Objektivkorrektur bei macOS, bis unsere eigene Entwicklung die Verzeichnung korrigiert. Die grauen Felder der S5 kommen neutraler heraus als über rawler (ein Farbstich von 1,42 gegenüber 2,43, wobei 0 vollkommen grau ist). Fujifilm X-Trans folgt mit Markesteijn, und danach die Entwicklung auf der Grafikkarte für die Vorschau, mit dem Ergebnis des Prozessors als Referenz.
Vorschläge für die besten Aufnahmen: geprüft an der Wahl eines Menschen
Wir haben 95 echte Fotos von Hand in 22 Momente sortiert und das beste Foto gewählt, wo es ein klares gab. Die Gruppen und Vorschläge von Fotollection wurden dann an dieser Wahl geprüft.
Wie die Vorschläge entstehen und bewertet werden
Zuerst werden die Momente gefunden. Die Fotos werden nach ihrer Aufnahmezeit geordnet, auf Bruchteile einer Sekunde genau, und ein neuer Moment beginnt, wenn die Pause länger ist als 2 Sekunden oder als das Vierfache der üblichen Pause, wenn Kamera oder Objektiv wechseln oder wenn sich der Ort um mehr als 30 m verschiebt. Jedes Foto bekommt außerdem eine kleine visuelle Signatur, seine Verteilung von Hell und Dunkel und seine Mischung der Farben, und eine Aufnahme gehört nur dann zum Moment, wenn sie den Aufnahmen davor noch ähnelt, wobei ein Schritt zur Seite oder ein Zoom, den die Brennweite erklärt, erlaubt ist.
Dann wird innerhalb eines Moments jedes Foto an einer verkleinerten Kopie gemessen: die Schärfe des Motivs, Verwacklung, Belichtung (ausgefressene Lichter, abgesoffene Tiefen, Helligkeit), Rauschen und, wo Gesichter zu sehen sind, ob die Augen offen und die Gesichter der Kamera zugewandt sind. Jeder Messwert wird nur mit den anderen Aufnahmen desselben Moments verglichen und gewichtet (Motivschärfe 35 %, offene Augen 20 %, Verwacklung 15 %, Belichtung 15 %, ausgefressene Lichter 10 %, der Rest weniger), mit einer kleinsten Stufe, damit ein Unterschied, der auf einem Abzug zu klein zum Sehen ist, nie den Ausschlag gibt. Der Vorschlag kommt mit seiner Begründung, nichts wird gelöscht, und alles läuft auf deinem Computer, in 17 ms pro Foto, 28 ms mit Gesichtern.
Damit das ehrlich bleibt, wurden 95 echte Fotos von Hand in 22 Momente sortiert, mit dem zu behaltenden Foto für die 6 Momente, die eine klar beste Aufnahme hatten. Jede Verbesserung wurde daran gemessen:
| Schritt | Gefundene Momente (von 22) | Falsch zusammengelegt | Annehmbare Wahl |
|---|---|---|---|
| Nur Bild-Fingerabdruck | 3 | 0 | 2 von 2 |
| Plus Aufbau und Farbe | 13 | 0 | 3 von 4 |
| Plus Zoom aus der Brennweite | 15 | 0 | 5 von 6 |
| Plus faire Schärfe und verdeckte Gesichter | 15 | 0 | 6 von 6 |
Zwei verschiedene Momente werden nie zusammengelegt; die zwei zusätzlichen Gruppen sind Paare, die von Hand als unklar markiert wurden. Die noch verpassten Momente sind solche, in denen sich Pose oder Bildausschnitt stark ändern, etwa ein Gericht, das noch einmal von der anderen Seite fotografiert wurde.
Die Begriffe hinter den Zahlen
Foto- und Druckjargon, so erklärt, wie wir es einem Freund erklären würden.
Was ist ΔE (Delta E)?16
ΔE misst, wie weit zwei Farben für ein menschliches Auge auseinanderliegen, berechnet in einem Farbraum, der unserem Sehen nachgebildet ist (CIELAB, mit der Formel von 2000). 0 heißt identisch. Um 1 liegt der kleinste Unterschied, den ein geschultes Auge im direkten Vergleich erkennt; 2 bis 3 sehen die meisten Menschen; über 5 wirken die Farben verschieden. Der Druckexport von Fotollection liegt im Mittel bei 0,19.
Was ist SSIM?17
SSIM, der Index der strukturellen Ähnlichkeit, vergleicht die Formen und Texturen zweier Bilder statt einzelner Pixel, was näher daran ist, wie wir Unschärfe oder blockige Kompression bemerken. 1 heißt identisch. Über etwa 0,98 können die meisten Menschen die beiden ohne Hineinzoomen nicht unterscheiden.
Wie viele Farben fasst ein JPEG?6,18
Ein JPEG speichert 8 Bit für Rot, Grün und Blau: je 256 Stufen, etwa 16,7 Millionen Farben. Das ist auch das, wovon Fotolabore drucken. Kamera-RAW-Dateien fassen 12 bis 14 Bit, und neuere iPhones können 10-Bit-HEIC speichern, was beim Bearbeiten hilft; für einen fertigen Abzug zeigt ein gut gemachtes 8-Bit-JPEG keine Stufen zwischen den Tönen.
JPG oder JPEG? Und sollte ich PNG nehmen?
JPG und JPEG sind dasselbe Format: Das alte Windows erlaubte nur Endungen mit drei Buchstaben. PNG ist verlustfrei, es wird also nie etwas verworfen, aber ein als PNG gespeichertes Foto ist oft drei- bis fünfmal größer, und die meisten Automaten und Labore erwarten JPEG. Ein JPEG mit Qualität 90 oder mehr und voller Farbauflösung (4:4:4), wie Fotollection es für den Druck exportiert, ist auf Papier nicht vom Original zu unterscheiden.
Was bedeuten 4:4:4 und 4:2:0?
Unsere Augen sehen Details vor allem in der Helligkeit, weniger in der Farbe, deshalb kann JPEG die Farbe mit geringerer Auflösung speichern. 4:4:4 behält die volle Farbauflösung; 4:2:0 behält ein Viertel davon, was Dateien kleiner macht, aber farbige Kanten weicher werden lässt, etwa roten Text oder einen blauen Himmel hinter Blättern. Abzüge verdienen 4:4:4; soziale Medien komprimieren ohnehin alles neu in 4:2:0.
sRGB, Display P3, Adobe RGB und Farbprofile19,20,21
Ein Farbprofil sagt der Software, was die Zahlen in einer Datei bedeuten. sRGB ist der klassische Farbumfang des Webs. Display P3, genutzt von iPhones und neueren Kameras, erreicht etwa 25 % mehr Farben, besonders Rot- und Grüntöne. Verliert ein P3-Foto sein Profil, werden seine Zahlen als sRGB gelesen, und es wirkt ausgewaschen: Das ist der Sättigungsverlust von 13 %, den wir gemessen haben. Adobe RGB, das manche Kameras für die Druckarbeit anbieten, ist ebenfalls größer als sRGB, vor allem bei Grün- und Cyantönen. Fotollection behält für Abzüge das Profil, das ein Foto hat, und wandelt für soziale Medien sauber in sRGB um.
Welche DPI braucht ein Abzug?
DPI gibt an, wie viele Pixel auf jeden Zoll Papier fallen. Bei 300 DPI wirkt ein Abzug selbst aus der Nähe scharf; 150 bis 200 DPI genügen auf Armlänge. Ein 10 × 15-cm-Abzug mit 300 DPI braucht 1.800 × 1.200 Pixel, also reicht jedes Foto von Smartphone oder Kamera; die Größenempfehlung in der App sagt dir, wie groß jedes Foto werden kann.
Warum sehen Fotos auf Facebook schlechter aus?
Facebook verkleinert jedes Foto auf höchstens 2.048 px, komprimiert es mit geringerer Qualität und halbierter Farbauflösung neu und verwirft Farbprofile. Ein Foto, das zu groß ankommt, wird zweimal verkleinert, einmal von dir und einmal von Facebook. Schickst du es schon mit 2.048 px, in sRGB und leicht geschärft, komprimiert Facebook es nur einmal neu, und die Farben stimmen bereits.
Mach die Messungen selbst
Alles lässt sich mit deinen eigenen Fotos wiederholen. Die Skripte laden nie ein Foto hoch und kopieren keins; nur Zahlen werden behalten. Die vollständigen Tabellen, mit jedem Lauf, stehen in RESULT.md.
bench/run.sh ~/Pictures/some-folder 3
uv run bench/quality/audit.py ~/Pictures/some-folder /tmp/out
uv run bench/quality/share_audit.py ~/Pictures/some-folder /tmp/share