Notities van het team over vakmanschap, formaten en de kleine beslissingen achter een goede ronde uitsnede.
Waarom fotografische PNG's zo groot zijn
PNG belooft elke pixel zonder verlies vast te leggen, en die belofte is duur op een foto. Met miljoenen zacht verschuivende tonen valt er voor de compressor bijna niets te voorspellen of in te dikken, dus dijt het bestand uit. Een doorsnee foto van 1600x1200 kan als PNG op 3 tot 5 MB zitten, terwijl precies hetzelfde beeld als JPEG bij kwaliteit 85 in 200 tot 400 KB past. Het verschil komt neer op de cosinustransformatie waar JPEG op leunt, die het beeld in blokken van 8x8 hakt, de hoogfrequente details weggooit die het oog amper opmerkt, en wat overblijft strak inpakt. Materiaal met continue toon, oftewel zo goed als alle fotografie, krimpt dramatisch. De perfecte trouw van PNG verdient zijn plek op effen graphics en werk in uitvoering, maar het is gewoon de verkeerde verpakking voor een foto die je wilt delen.
Transparantie en het alfakanaal
Een 8-bits alfakanaal laat een PNG elk niveau van dekking per pixel vastleggen, van volledig helder tot volledig vast. JPG biedt geen zo'n veld, dus transparantie heeft nergens een plek. Wanneer de beeld-engine een PNG opnieuw als JPEG opbouwt, legt het het beeld eerst over een gekozen achterdoek, en dat achterdoek staat standaard op wit, wat precies de reden is dat heldere gebieden er daarna wit uitzien. De conclusie is bot, een transparante JPG kan niet bestaan, want het formaat heeft er geen idee van. Wanneer de uitsnede moet overleven, zijn WebP of de ongerepte PNG je enige routes. Araluma kiest wit als vulling omdat het opgaat in de documenten, dia's en winkelvermeldingen waar deze JPG's het vaakst belanden.
Gemeten opslagprestaties
Dit komt allemaal van Chrome 148 op een Linux-desktop, leunend op het eigen JPEG-opslaan van de browser. Op 0,12 MP is een thumbnail van 400x300 in ongeveer 10 tot 15 ms ingepakt. Stap naar 0,78 MP, een frame van 1024x768, en het zit dicht bij 13 tot 20 ms. Een opname van 8 MP op 3840x2160 vraagt ruwweg 1,4 seconde, en zelfs een monster van 48 MP op 8000x6000 vraagt maar om ongeveer 1,5 seconde. Een JPG zo wegschrijven verslaat het wegschrijven van een PNG van hetzelfde beeld met gemak, en het rent AVIF volledig voorbij, dat een aparte module moet laden en op dat beeld van 48 MP zelfs op een desktop 25 seconden kan zwoegen. Bij elkaar is dit een van de snelste routes in de hele convert-familie, en het kost niets extra om op te halen, want de JPEG-schrijver leeft al in elke browser.
Omgang met EXIF en metadata
Het opnieuw opbouwen van het beeld wist zijn EXIF-, IPTC- en XMP-tags uit de resulterende JPG in elke browser, wat GPS-coördinaten, de camerabody, het tijdstip van opname, copyrighttekst en alle aangepaste velden die de PNG meedroeg eruit veegt. ICC-kleurprofielen nemen een aparte route, waar Chrome en Safari het sRGB-profiel op de uitvoer houden terwijl Firefox het met al het andere wegstript. Dus de JPG is overal sRGB-veilig, maar een breed kleurprofiel zoals Display-P3 of Adobe RGB komt niet door Firefox heen. Hangt je pijplijn af van het vasthouden van al die metadata, beheer ze dan na afloop met een doelgericht hulpmiddel. Voor dagelijks web- en deelgebruik is het verlies van de tags welkom, het trimt een beetje gewicht en haalt locatiegegevens uit je foto's.
Wanneer JPG-artefacten zichtbaar zijn
JPEG redeneert in blokken van 8x8. Laat een harde sprong tussen twee zeer verschillende kleuren binnen één blok vallen en de JPEG-compressie kan hem alleen schetsen met een handvol frequentietermen, wat ringvorming achterlaat, een vage halo van lichtere of donkerdere pixels die zich tegen de rand vlijt. Foto's verbergen dit goed, want hun randen zijn nooit messcherp en de omringende microvariatie maskeert de benadering. Maar schermafbeeldingen, logo's, vakken met scherpe randen, letters of naast elkaar liggende vlakken effen kleur leggen het bij elke kwaliteit bloot, want dat is precies het signaal waar het rekenwerk mee worstelt. De regel schrijft zichzelf, houd schermafbeeldingen, logo's en tekstrijke kunst uit JPG. Laat ze in PNG, of stap over op WebP voor een slank bestand dat de ringvorming volledig ontwijkt.
Privacy en waar het werk belandt
Waar het werk belandt, hangt af van het aantal. Bij één afbeelding verlaat er niets de browser, en je kunt het in seconden live checken. Open de Chrome DevTools, ga naar het netwerkpaneel, filter op XHR en Fetch en zet een bestand om. Er verschijnt niets tijdens het coderen. Bij twee of meer stuurt Araluma ze naar onze server, die omzet, het resultaat bundelt en een downloadlink teruggeeft. Die link en de omgezette bestanden worden binnen ongeveer 2 uur verwijderd. Het pad voor één afbeelding houdt alles op het apparaat, buiten het netwerk, terwijl een batch dat inruilt voor veel bestanden in één keer afronden. Bij een screenshot van iets privés of een foto met je locatie houdt één voor één omzetten het op je machine, een echt verschil, geen slogan.