Geen upload, 100% lokaal, geen account

Artikel

Waarom afbeeldingen elke keer kwaliteit verliezen bij het opslaan

Een foto die er scherp uitzag op een camerarol komt er blokkerig uit nadat ze door een paar groepschats is doorgestuurd en een paar keer opnieuw is gepost. Niemand heeft haar met opzet bewerkt; ze onderging gewoon meerdere keren een nieuwe codering, en elke keer ging er wat meer detail verloren. Dit is generatieverlies, een oude en goed begrepen eigenschap van lossy-compressie, en het verklaart waarom veel gedeelde afbeeldingen er geleidelijk slechter uit gaan zien. Dit is wat een lossy nieuwe codering echt weggooit, waarom het zich opstapelt, en hoe je een bestand verder laat verslechteren tegenhoudt.

Wat 'lossy' echt weggooit

JPEG, het formaat achter de meeste foto's die online worden gedeeld, is met opzet lossy: de standaard erachter, ITU-T T.81, werkt door blokken pixels om te zetten in frequentiedata en die data vervolgens min of meer agressief af te ronden afhankelijk van de kwaliteitsinstelling, een stap die quantisatie heet. Afronden kan niet exact ongedaan worden gemaakt; het weggegooide detail is echt weg, niet ergens in het bestand verborgen. Een hoge kwaliteitsinstelling rondt zachtjes af en het verlies is nauwelijks te zien, een lage rondt hard af en het bestand wordt zichtbaar blokkerig, maar zelfs een enkele JPEG-opslag gooit altijd iets weg.

Elke nieuwe codering is een nieuwe generatie

De eerste keer dat een foto als JPEG wordt opgeslagen, worden de pixelgegevens van de camera één keer gequantiseerd. Die JPEG opnieuw openen en opnieuw opslaan, zelfs zonder enige bewerking, decodeert de al benaderde pixels en quantiseert ze een tweede keer, bovenop de eerste afronding, niet in plaats ervan. Elke extra opslag is nog een generatie, en elke generatie stapelt zich op bij de blokkerigheid en kleurband die de vorige generatie al introduceerde. Eén enkele passage bij een verstandige kwaliteitsinstelling is bijna onzichtbaar; dezelfde instelling vijf of zes keer achter elkaar toegepast op hetzelfde bestand verslechtert een foto zichtbaar, omdat de fouten van elke eerdere generatie er nog steeds zijn wanneer de volgende opnieuw afrondt.

Een keten van vijf JPEG-generaties: elke nieuwe codering begint vanaf de al afgeronde pixels van de vorige, en de afbeelding wordt zichtbaar blokkeriger bij de vijfde generatie

Waarom veel gedeelde afbeeldingen er slechter uitzien

Een foto die door meerdere chats, feeds en nieuwe uploads reist, krijgt bij bijna elke sprong een nieuwe generatie: een messaging-app comprimeert haar opnieuw voor de chat, een sociaal platform codeert haar opnieuw voor zijn eigen leveringspijplijn, iemand maakt een screenshot van het resultaat en uploadt dat screenshot opnieuw, wat nog eens een volledige nieuwe codering is van een al verslechterde afbeelding. Geen van deze stappen hoeft achteloos te zijn of een ongewoon lage kwaliteitsinstelling te gebruiken om het effect op te laten stapelen; het is van nature cumulatief, wat precies waarom een afbeelding die al lang wijd verspreid is vaak merkbaar meer blokkerigheid en kleurband toont dan een verse kopie van dezelfde foto.

Lossless-formaten hebben dit probleem niet

PNG en lossless WebP werken anders: ze comprimeren door patronen in de exacte pixelgegevens te vinden en efficiënter in te pakken, zonder iets af te ronden, dus decoderen en opnieuw coderen van hetzelfde lossless-bestand, zonder bewerkingen, reproduceert de pixels exact, generatie na generatie. Die garantie is waarom screenshots en grafieken met scherpe randen of tekst meestal als PNG worden opgeslagen in plaats van als JPEG. Het heeft een prijs: een lossless-bestand van een gewone foto is veel groter dan een JPEG bij een redelijke kwaliteit, omdat er niets afgerond wordt om het te verkleinen.

Tien keer opnieuw opgeslagen vergeleken: een JPEG toont zichtbaar opstapelende blokartefacten, een lossless PNG blijft pixel-identiek aan het origineel

De kwaliteit van een bestand onder controle houden

De keten van generatieverlies stapelt zich alleen op als elke opslag begint vanaf de al verslechterde pixels van de vorige opslag. Een lossless master bewaren, het originele camerabestand of een PNG, en er telkens een verse JPEG uit exporteren voorkomt dat nieuwe afronding bovenop oude wordt gestapeld. Onze afbeeldingscompressor laat je een kwaliteitsinstelling kiezen en de resulterende bestandsgrootte zien voordat je iets verstuurt, en onze afbeeldingsvergelijkingstool zet het origineel en de gecomprimeerde kopie naast elkaar met een schuifbalk, zodat je een slechte instelling kunt betrappen voordat je het bestand doorstuurt en een nieuwe generatie start. Beide draaien volledig in je browser: de foto verlaat nooit je apparaat om te worden gecontroleerd.

Tools in dit artikel

Veelgestelde vragen

Verslechtert een JPEG-bestand kopiëren of verplaatsen?

Nee. Een bestand kopiëren, aan een e-mail hangen, of tussen mappen verplaatsen kopieert exact dezelfde bytes; er wordt niets gedecodeerd of opnieuw gecodeerd, dus wordt er niets opnieuw gequantiseerd. Generatieverlies gebeurt alleen als de pixels daadwerkelijk worden geopend en opnieuw opgeslagen, niet als het bestand zelf wordt verplaatst.

Kan ik generatieverlies ongedaan maken en het verloren detail terugkrijgen?

Nee. Quantisatie is echt lossy: de afgeronde frequentiedata die een eerdere opslag weggooide, staat nergens in het bestand geregistreerd, dus geen filter of algoritme kan het reconstrueren. Een verslechterde JPEG scherper maken of ontruisen kan de artefacten visueel minder opvallend maken, maar het herstelt het originele detail niet.

Stopt het converteren van een verslechterde JPEG naar PNG het probleem?

Converteren nadat de schade al is aangericht, bewaart pixel voor pixel wat de JPEG er op dat moment al uitziet, zonder een nieuwe afrondingsstap toe te voegen, maar het kan geen detail herstellen dat in eerdere opslagbeurten verloren ging. De oplossing is beginnen met het bewaren van een lossless master voordat er meer generaties gebeuren, niet laat in de keten een foto converteren.

Bronnen