libjpeg - libjpeg

libjpeg
Logo IJG libjpeg v9
Utvikler (er) Uavhengig JPEG Group
Guido Vollbeding (vedlikeholder)
Første utgivelse 7. oktober 1991 ; 30 år siden ( 1991-10-07 )
Stabil utgivelse
9d / 12. januar 2020 ; 21 måneder siden ( 2020-01-12 )
Skrevet inn C
Operativsystem Kryssplattform
Type bibliotek
Tillatelse Tilpasset BSD -lignende ( gratis programvare )
Nettsted ijg .org ; jpegclub .org /referanse /

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

jpegtran transformerer JPEG -data uten omkoding
(her med brukergrensesnitt CropGUI )

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:

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
Gammel versjon, ikke lenger vedlikeholdt: 1 1991 Første utgivelse
Baseline eller optimalisert JPEG
GIF- eller PPM -utgang
Gammel versjon, ikke lenger vedlikeholdt: 2 1991 Interne forbedringer
Flere input/output -formater
Gammel versjon, ikke lenger vedlikeholdt: 3 1992 Interne forbedringer og bildekvalitet
Gammel versjon, ikke lenger vedlikeholdt: 4 1992 Interne og hastighetsforbedringer
Gammel versjon, ikke lenger vedlikeholdt: 4a 1993-02-18
Gammel versjon, ikke lenger vedlikeholdt: 5 1994-09-24 Interne forbedringer og revidert API
Gammel versjon, ikke lenger vedlikeholdt: 5a 1994-12-07
Gammel versjon, ikke lenger vedlikeholdt: 5b 1995-03-15
Gammel versjon, ikke lenger vedlikeholdt: 6 1995-08-02 Progressiv JPEG
jpegtran (konvertere mellom grunnlinje og progressiv)
Gammel versjon, ikke lenger vedlikeholdt: 6a 1996-02-07
Eldre versjon, men likevel vedlikeholdt: 6b 1998-03-27 jpegtran utvidet til tapsfri rotering
Brukes av libjpeg-turbo
Proprietære ikke-kompatible utvidelser
Gammel versjon, ikke lenger vedlikeholdt: 7 2009-06-27 jpegtran utvidet til tapsfri avling

T.851 Arithmetic Coding
SmartScale -utvidelse (ITU avvist)

Gammel versjon, ikke lenger vedlikeholdt: 8 2010-01-10 Interne reparasjoner
jpegtran utvidet til bruk av SmartScale
Gammel versjon, ikke lenger vedlikeholdt: 8a 2010-02-28 RGBA
Gammel versjon, ikke lenger vedlikeholdt: 8b 2010-05-16
Gammel versjon, ikke lenger vedlikeholdt: 8c 2011-01-16 Variabel DCT -blokkstørrelse
Gammel versjon, ikke lenger vedlikeholdt: 8d 2012-01-15 RGB JPEG (ingen fargetransformasjon til YCbCr)
Gammel versjon, ikke lenger vedlikeholdt: 9 2013-01-13 YCoCg farge Tapsløs
komprimering (1x1 DCT)
Gammel versjon, ikke lenger vedlikeholdt: 9a 2014-01-19 " JFIFv 2" scRGB Bredt fargespekter (ukjent standard)
8-12 biters farge (original JPEG)
Gammel versjon, ikke lenger vedlikeholdt: 9b 2016-01-17
Gammel versjon, ikke lenger vedlikeholdt: 9c 2018-01-14
Gjeldende stabil versjon: 9d 12.01.2020
Legende: Gammel versjon, ikke vedlikeholdt Eldre versjon, fortsatt vedlikeholdt Gjeldende stabil versjon Siste forhåndsversjon Fremtidig utgivelse

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

libjpeg-turbo
Logo libjpeg-turbo
Utvikler (er) libjpeg-turbo Project
Første utgivelse 2010 ; 11 år siden ( 2010 )
Stabil utgivelse
2.1.0 / 24. april 2021 ; 5 måneder siden ( 2021-04-24 )
Nettsted libjpeg-turbo .org

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

mozjpeg
mozjpeg
Cjpeg-screenshot.png
mozjpeg prøver flere partisjoner av spekteret av DCT -koeffisienter
Utvikler (er) Mozilla Research
Første utgivelse 4. mars 2014 ; 7 år siden ( 2014-03-04 )
Stabil utgivelse
4.0.3 / 26. februar 2021 ; 7 måneder siden ( 2021-02-26 )
Nettsted github .com /mozilla /mozjpeg

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

libjpeg
Utvikler (er) Thomas Richter /JPEG -referanse AhG
Første utgivelse 27. juli 2012 ; 9 år siden ( 2012-07-27 )
Stabil utgivelse
1.55 / 20. juli 2018 ; 3 år siden ( 2018-07-20 )
Tillatelse GNU GPLv3
Nettsted github .com /thorfdbg /libjpeg

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