libjpeg - libjpeg
Utvikler (er) | Uavhengig JPEG Group Guido Vollbeding (vedlikeholder) |
---|---|
Første utgivelse | 7. oktober 1991 |
Stabil utgivelse | 9d / 12. januar 2020
|
Skrevet inn | C |
Operativsystem | Kryssplattform |
Type | bibliotek |
Tillatelse | Tilpasset BSD -lignende ( gratis programvare ) |
Nettsted |
ijg |
libjpeg er et gratis bibliotek med funksjoner for håndtering av JPEG -bildedataformat. Den implementerer en JPEG -kodek (koding og dekoding) sammen med forskjellige verktøy for å håndtere JPEG -data. Den er skrevet i C og distribuert som gratis programvare sammen med kildekoden under vilkårene i en tilpasset tillatelig ( BSD -lignende) gratis programvarelisens, som krever tilskrivning . Den originale varianten vedlikeholdes og publiseres av Independent JPEG Group (IJG). I mellomtiden er det flere gafler med tilleggsfunksjoner.
JPEG JFIF -bilder er mye brukt på nettet. Mengden komprimering kan justeres for å oppnå ønsket avveining mellom filstørrelse og visuell kvalitet.
Verktøy
Følgende verktøy blir sendt sammen med libjpeg:
- cjpeg og djpeg
- for å utføre konverteringer mellom JPEG og noen andre populære bildefilformater.
- rdjpgcom og wrjpgcom
- for å sette inn og trekke ut tekstkommentarer i JPEG -filer.
- jpegtran
- for transformasjon av eksisterende JPEG -filer.
jpegtran
Den kommandolinje- program jpegtran har flere funksjoner for å formatere og omkoding av representasjonen av de DCT- koeffisienter, for transformasjon av aktuelle bildedata og for kassering av tilleggsdata i JPEG-filer, henholdsvis. Transformasjonene angående representasjonen av koeffisientene omfatter:
- optimalisering av Huffman -kodingslaget i en JPEG -fil for å øke komprimering,
- konvertering mellom progressive og sekvensielle JPEG -formater,
- konvertering mellom Huffman og aritmetisk koding i entropikodingslaget .
Disse transformasjonene er hver tapt og reversible. Transformasjonene på bildedataene omfatter:
- eliminere ikke-standard applikasjonsspesifikke data satt inn av noen bildeprogrammer,
- utføre visse transformasjoner på en fil, for eksempel:
- kasting av fargekanaler (konvertering til gråtoner),
- rotere og snu i trinn på 90 grader,
- beskjæring ved bildeblokkgrenser (hver 8 × 8 eller 16 × 16 piksler),
- skalering.
Disse er tapsfrie og reversible bare når det gjelder bildedataene som lagres. Re -koding med gjentatt tapskvantisering av bildedata ( generasjonstap ) finner ikke sted.
Det er en tilknyttet Windows -applikasjon, Jpegcrop , som gir et brukergrensesnitt til jpegtran . For Unix-lignende systemer som Linux er det gratis CropGUI med lignende funksjonalitet. Flere programmer som støtter JPEG -tapfrie transformasjonsfunksjoner basert på IJG -koden, er gitt på listen over tapsløse applikasjoner .
Historie
JPEG -implementeringen av Independent JPEG Group (IJG) ble først offentliggjort 7. oktober 1991 og har blitt betydelig utviklet siden den gang. Utviklingen ble først og fremst utført av Tom Lane . Den open-source gjennomføring av IJG var en av de store open-source pakker og var nøkkelen til suksess for JPEG-standarden. Mange selskaper innlemmet det i en rekke produkter som bildedigerere og nettlesere.
For versjon 5, som ble utgitt 24. september 1994, ble hele kodebasen omskrevet. Den introduserte verktøyprogrammene rdjpgcom og wrjpgcom for håndtering av innebygde tekstkommentarer. Versjonen 6 fra 2. august 1995 kom med støtte for progressiv JPEG og for første gang med verktøyet jpegtran . Dette verktøyet ble utvidet med funksjoner for å rotere og snu bilder og gråtoner i versjon 6b.
Fra versjon 6b av libjpeg av 27. mars 1998 forklet Miyasaka Masaru en gren ved navn libjpeg/SIMD , som inkluderte x86 SIMD -optimaliseringer. Den fikk betydelige bidrag fra TigerVNC og VirtualGL-prosjektene i 2009. På grunnlag av dette ble libjpeg-turbo-prosjektet opprettet i 2010.
Etter 11 år og et lederskifte, ga IJG ut nye versjoner av libjpeg (7 til 9), hvorav hver brøt ABI -kompatibilitet med tidligere versjoner. Endringene som ble ventet etter 6x -serien ble ikke levert. I versjon 7 ble støtte for aritmetisk koding introdusert, som tidligere har blitt avvist på grunn av patentsituasjonen , samt beskjæringsfunksjonen i jpegtran ( -crop
).
Versjon 8 og 9 tjente i utgangspunktet for introduksjonen av kontroversielle inkompatible formatutvidelser. Disse er allment ansett som ineffektive og dårligere enn eksisterende, standardiserte løsninger. Standardiseringen deres ble avvist etter innsending til ITU-T . Den opprinnelige arrangøren Tom Lane og andre kritiserer disse endringene som et brudd på målene for IJG.
Mars 2014 ble den første versjonen av filstørrelsesoptimaliserende gaffel mozjpeg publisert. For denne versjonen Josh Aas fra Mozilla Forskning omarbeidet Perl -skript jpegcrush fra x264 's hovedutvikler Loren Merritt og integrert den inn i kodebasen fra libjpeg-turbo.
Juli 2014 ga Mozilla ut versjon 2.0, som hovedsakelig la til trellis -kvantisering og nå også kan redusere størrelsen på opprinnelige JPEG -er. Facebook , Inc. donert60 000 dollar for utviklingen av den neste versjonen, og CloudFlare tildelte en utvikler for forbedring av mozjpeg.
Versjoner
Versjon | Løslatt | Nye funksjoner | |
---|---|---|---|
ITU T.81 JPEG -kompatibel | |||
1 | 1991 | Første utgivelse Baseline eller optimalisert JPEG GIF- eller PPM -utgang |
|
2 | 1991 | Interne forbedringer Flere input/output -formater |
|
3 | 1992 | Interne forbedringer og bildekvalitet | |
4 | 1992 | Interne og hastighetsforbedringer | |
4a | 1993-02-18 | ||
5 | 1994-09-24 | Interne forbedringer og revidert API | |
5a | 1994-12-07 | ||
5b | 1995-03-15 | ||
6 | 1995-08-02 | Progressiv JPEG jpegtran (konvertere mellom grunnlinje og progressiv) |
|
6a | 1996-02-07 | ||
6b | 1998-03-27 | jpegtran utvidet til tapsfri rotering Brukes av libjpeg-turbo |
|
Proprietære ikke-kompatible utvidelser | |||
7 | 2009-06-27 | jpegtran utvidet til tapsfri avling T.851 Arithmetic Coding |
|
8 | 2010-01-10 | Interne reparasjoner jpegtran utvidet til bruk av SmartScale |
|
8a | 2010-02-28 | RGBA | |
8b | 2010-05-16 | ||
8c | 2011-01-16 | Variabel DCT -blokkstørrelse | |
8d | 2012-01-15 | RGB JPEG (ingen fargetransformasjon til YCbCr) | |
9 | 2013-01-13 |
YCoCg farge Tapsløs komprimering (1x1 DCT) |
|
9a | 2014-01-19 | " JFIFv 2" scRGB Bredt fargespekter (ukjent standard) 8-12 biters farge (original JPEG) |
|
9b | 2016-01-17 | ||
9c | 2018-01-14 | ||
9d | 12.01.2020 |
Legende: | Gammel versjon, ikke vedlikeholdt | Eldre versjon, fortsatt vedlikeholdt | Gjeldende stabil versjon |
---|
Gafler
Kjente gafler er libjpeg-turbo, som optimaliserer for utførelseshastighet, og mozjpeg, som optimaliserer for mindre filstørrelser.
Det er også et bibliotek med samme navn fra ISO , som har som mål å være en fullstendig implementering av JPEG-, JPEG XT- og JPEG-LS- standarder.
libjpeg-turbo
Utvikler (er) | libjpeg-turbo Project |
---|---|
Første utgivelse | 2010 |
Stabil utgivelse | 2.1.0 / 24. april 2021
|
Nettsted | libjpeg-turbo |
libjpeg-turbo er en gaffel av libjpeg som bruker SIMD- instruksjoner for å akselerere grunnlinjen for JPEG-koding og dekoding. Mange prosjekter bruker nå libjpeg-turbo i stedet for libjpeg, inkludert populære Linux-distribusjoner ( Fedora , Debian , Mageia , openSUSE , ...), Mozilla og Chrome . Bortsett fra ytelse, har noen prosjekter valgt å bruke libjpeg-turbo fordi det lar dem beholde bakovergående ABI- kompatibilitet med den eldre libjpeg v6b-utgivelsen. libjpeg v7, v8 og v9 ødela ABI -kompatibiliteten med tidligere utgivelser.
libjpeg-turbo kan konfigureres til å være kompatibel med libjpeg v7 eller v8 ABI, men den implementerer ikke det komplette settet med funksjoner i de siste IJG-utgivelsene, inkludert SmartScale-formatforlengelsen. Libjpeg-turbo-prosjektet har valgt å ikke støtte SmartScale, med henvisning til bekymringer for det faktum at det ikke er en ITU-T- standard og henviser til egen forskning som setter spørsmålstegn ved bruken av funksjonen. Siden den eneste store nye funksjonen i libjpeg v9 er spesifikk for SmartScale-formatet, har libjpeg-turbo-prosjektet valgt å gi avkall på å etterligne libjpeg v9. Derfor vil SmartScale-filer opprettet av libjpeg v8 og senere ikke dekomprimeres riktig av libjpeg-turbo.
libjpeg-turbo er en av de to JPEG-referanseimplementeringene, tilgjengelig som ISO/IEC 10918-7 og ITU-T T.873 . Den andre referanseimplementeringen er ISO libjpeg som også inkluderer støtte for JPEG XT og JPEG LS.
mozjpeg
Utvikler (er) | Mozilla Research |
---|---|
Første utgivelse | 4. mars 2014 |
Stabil utgivelse | 4.0.3 / 26. februar 2021
|
Nettsted | github |
mozjpeg er en gaffel fra libjpeg-turbo gjort av Josh Aas og andre fra Mozilla Research. Den tar sikte på å øke hastigheten på lasting av nettsider ved å oppnå en reduksjon i filstørrelse (på omtrent 10%) og dermed overføringstid gjennom forbedring av kodingseffektiviteten, samtidig som bildekvaliteten beholdes. For å oppnå dette bruker den mer prosessorkraft for kodingen (asymmetri) samtidig som den beholder full kompatibilitet med JPEG -standarden og krever ingen endringer på dekodersiden.
Teknikkene mozjpeg bruker for å oppnå høy komprimering inkluderer optimalisering av Huffman -trær , bruk av progressiv koding for optimalt å dele spekteret av DCT -koeffisienter i separate skanninger, og gjennom bruk av espalierkvantisering . I tillegg er forhåndsinnstillingene aggressivt innstilt på å minimere filstørrelser.
Foruten libjpeg-turbo bygger mozjpeg også på jpegcrush, et Perl- skript av Loren Merritt.
ISO libjpeg
Utvikler (er) | Thomas Richter /JPEG -referanse AhG |
---|---|
Første utgivelse | 27. juli 2012 |
Stabil utgivelse | 1.55 / 20. juli 2018
|
Tillatelse | GNU GPLv3 |
Nettsted | github |
ISO/IEC Joint Photography Experts Group opprettholder en referanseprogramvareimplementering for grunnleggende JPEG (ISO/IEC 10918-1 og 18477-1) og JPEG XT- utvidelser (ISO/IEC 18477 Del 2 og 6-9), samt tapsfrie JPEG- LS (ISO/IEC 14495). Det inkluderer også noen av optimaliseringene av mozjpeg. Selv om den også heter libjpeg, er den ikke relatert til kildekoden fra Independent JPEG Group (IJG) og støtter ikke proprietære utvidelser introdusert av IJG siden 2007.
Se også
Referanser
Eksterne linker
- Offisielt nettsted for Independent JPEG Group
- Vanlige spørsmål om JPEG
- JPEGclub - Tilleggsfunksjoner for libjpeg
- Binær pakke med libjpeg for Windows (på GnuWin32 i SourceForge.net)
- libjpeg-turbo , en ABI-/API-kompatibel gaffel av libjpeg som bruker x86 SIMD-instruksjoner for å oppnå en betydelig speedup over referanseimplementeringen.
- mozjpeg - filstørrelsesoptimaliserende gaffel på GitHub
- Nyman, Robert; Aas, Josh (6. august 2014). "Bruke mozjpeg til å lage effektive JPEG -er" . Hacks . Mozilla.