Notities van het team over vakmanschap, formaten en de kleine beslissingen achter een goede ronde uitsnede.
De lossless container, wat PNG opslaat
PNG leunt op DEFLATE, een lossless algoritme. Het schrijft de RGBA-waarden van elke pixel exact uit, draait eerst een omkeerbaar filter over elke scanlijn en knijpt dan het geheel met een zlib-achtige stroom. Lossless betekent hier dat de waarden die je decomprimeert byte-voor-byte dezelfde zijn als die je erin stopte. In het JPG-naar-PNG-geval zijn de waarden die erin gaan de pixels die de browser teruggeeft na het decoderen van de JPEG, en die dragen al elke benadering die de oorspronkelijke JPEG-codering invoerde. Dus legt PNG plichtsgetrouw de benaderingen vast, niet de echte scène die werd gefotografeerd. Gemeten landt een JPEG van 17 KB op 1024x768 bij bijna 105 KB als PNG, terwijl een JPEG van 116 KB op 3840x2160 ongeveer 384 KB bereikt. De veelvouden volgen de resolutie in plaats van de JPEG-kwaliteitsinstelling, en daarom blijven ze ruwweg stabiel over inhoud heen. De container verdient zijn brood door het verval te stoppen, niet door het terug te draaien.
Waarom JPEG-kwaliteit niet te herstellen is
JPEG werpt informatie voorgoed af. Zijn codeerder draait een cosinustransformatie over blokken van 8x8, rondt de frequentiecoëfficiënten af naar een grovere set en slaat die afgeronde getallen op. Die afronding gaat maar één kant op, dus een coëfficiënt die 47 las voor hij naar 50 werd vastgeklikt kan nooit terug worden geduwd, en het bestand bewaart geen geheugen van de 47. De JPEG decoderen herbouwt pixels uit de afgeronde coëfficiënten, die gissingen zijn naar de originelen. Wikkel die gissingen in PNG en je krijgt een vlekkeloze kopie van een gebrekkige afbeelding. Niets hiervan is een tekort van PNG of van Araluma, het is gewoon hoe lossy compressie werkt, waarbij alles wat bij coderen valt gevallen blijft. De enige route naar betere JPEG-kwaliteit is teruggaan naar de ongecomprimeerde bron of het RAW-bestand.
Gemeten groei van de bestandsgrootte
Hoeveel een JPG opzwelt op weg naar PNG hangt van de afbeelding af, maar de trend ligt vast. Drukke foto's met rijke toonverschuivingen groeien het meest, want dat is het materiaal dat JPEG voortreffelijk comprimeert terwijl PNG's lossless coder zulke ruiserige pixels niet kan bijbenen. Uit de eigen tests van deze tool wordt een JPEG-foto van 17 KB op 1024x768 een PNG van 105 KB, ongeveer een verzesvoudiging, en een JPEG-foto van 116 KB op 3840x2160 een PNG van 384 KB, ruwweg 3,3 keer groter. Vlak materiaal zoals screenshots en pictogrammen past om te beginnen al slecht bij JPEG en weegt daar doorgaans meer, dus de PNG ervan groeit minder scherp. De les is helder, als je een kleinere uitvoer najaagt, duwt een JPG in een PNG je de verkeerde kant op.
Transparantie, de mogelijkheid versus de inhoud
PNG's 8-bit alfakanaal is een functie van de container, waarmee elke pixel een dekking kan dragen van 0 voor volledig helder tot 255 voor volledig vast. Wanneer een JPG via de afbeeldingsengine van het platform als PNG wordt herbouwd, komt elke pixel uit op 255, volledig dekkend, want de JPG had om te beginnen geen transparantie om door te geven. De PNG staat klaar om alfadata op te slaan, het bestand bevat er alleen geen, omdat er geen was in de bron. Transparantie in de afbeelding zetten vergt een aparte bewerking, ofwel de achtergrond met de hand maskeren in een editor ofwel een automatische achtergrondverwijderaar draaien. Een verwijderaar afgesteld om het onderwerp te spotten kan een PNG met echt alfa leveren door de dekking van de achtergrondpixels na de omzetting op nul te zetten.
Omgang met EXIF-metadata
Wanneer het bestand wordt herbouwd, vallen zijn EXIF-, IPTC- en XMP-tags weg van de PNG in elke browser, en nemen GPS-coördinaten, de camerabody, de opnamedatum, copyrighttekst en welke eigen XMP de JPG ook hield met zich mee. Kleurprofielen lopen iets uiteen. Chrome en Safari houden de sRGB-tag op wat eruit komt, terwijl Firefox hem met al het andere laat gaan. Dus is de PNG sRGB-veilig waar je hem ook opent, al overleeft een wide-gamutprofiel als Display-P3 of Adobe RGB Firefox niet. Voor gewoon web en delen is de tags laten vallen een plus, het scheelt een beetje gewicht en haalt locatiedata uit je foto's. Voor professioneel of archiefwerk dat zijn ingebedde metadata moet houden, beheer je die keten met een doelgericht tool voor of na het omzetten.
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.