Praktisk demonstration af gentagen pakning af JPEGs
JPEG formatet er vældig brugbart til at formindske filstørrelsen på billeder på bekostning af et rimeligt kvalitetstab. Spørgsmålet er hvad der sker, hvis man åbner et JPEG billede, laver lidt ændringer og gemmer det igen?
JPEG image compression FAQ, sektion 10 angiver at det er muligt at åbne en JPEG og gemme den igen (næsten) uden ekstra tab, hvis der ikke ændres nævneværdigt i billedet, hvis man anvender samme program som pakkede originalbilledet og hvis man anvender samme kvalitetsindstilling.
Whoops. Det var en del krav. Og kan brugeren huske hvilken kvalitetsindstilling, der blev brugt sidst? Hvis han kan og hvis han kun retter lidt på røde øjne, går det nok. Hvis ikke, ja, hvad sker der så?
Prøv at eksperimentere med den her. Billederne er skaleret til 300% for at vise detaljerne. Det burde virke, hvis din browser er sat til at vise billeder og hvis den understøtter JavaScript. Hvis ikke, kan du kigge på billederne i bunden af siden.
![[Eksempelbillede]](pic/palmeQ95_00.jpg)
Jeg vil gerne prøve at give et par praktiske eksempler på hvad der sker ved gentagen JPEG pakning med mellemliggende manipulationer. Det er vigtigt at det er fejlene fra JPEG pakningen og ikke ændringerne fra manipulationerne der træder igennem, så der skal bruges nogle manipulationer, der kan ændres tilbage igen.
I dette forsøg åbnes et JPEG billede, det forrykkes en pixel i en given retning og det gemmes som JPEG igen. Det nye JPEG åbnes, forrykkes en pixel og gemmes igen osv. Ved at holde styr på forrykningerne kan vi vende tilbage til udgangspunktet.
Hvis der anvendes et tabsfrit format, som f.eks. PNG, vil slutbilledet være identisk med originalen. Når man bruger JPEG, vil forskelle mellem slutbilledet og originalen altså være et resultat af JPEG pakningerne.
Jeg har anvendt billeder jeg selv har taget. Til skalering, forrykning og pakning har jeg anvendt ImageMagick sammen med en lille BAT-fil. Kvaliteten for JPEG pakning er sat til 95% i alle tilfælde.
Originalbillederne kan hentes som Palme.png, Blade.png og Skrammel.png. Hvis du vil eksperimentere videre, skal du være velkommen til at bruge dem.
Min fortolkning er at der er synlige artefakter ved 4. generation, men at de er til at leve med. Ved 8. generation er de tydelige og man vil nok lægge mærke til dem ved udprint. Ved 16. generation er der sket en klar forringelse af billedet. Det går i særdeleshed ud over farverne.
Resultatet bliver sikkert anderledes, hvis der anvendes andre programmer. ImageMagick er vist hverken specielt dårligt eller specielt fremragende til at pakke i JPEG formatet. Hvis nogen skulle have lavet en lignende test med f.eks. PhotoShop eller et andet kendt program, vil jeg meget gerne have en mail om det (darkwing@daimi.au.dk"). Så vil jeg indsætte et link til siden.
Billederne er skaleret til 200% for at tydeliggøre artefakter fra JPEG pakning. "Gen." refererer til hvor mange gange billedet har været genpakket.
| Gen. 0 | ![]() |
|---|---|
| Gen. 4 | ![]() |
| Gen. 8 | ![]() |
| Gen. 16 | ![]() |
| Gen. 0 | ![]() |
|---|---|
| Gen. 4 | ![]() |
| Gen. 8 | ![]() |
| Gen. 16 | ![]() |
| Gen. 0 | ![]() |
|---|---|
| Gen. 4 | ![]() |
| Gen. 8 | ![]() |
| Gen. 16 | ![]() |
Toke Eskildsen
16. marts 2003