libjpeg - libjpeg
Desarrollador (es) | Independiente JPEG Group Guido Vollbeding (mantenedor) |
---|---|
Versión inicial | 7 de octubre de 1991 |
Lanzamiento estable | 9d / 12 de enero de 2020
|
Escrito en | C |
Sistema operativo | Multiplataforma |
Escribe | Biblioteca |
Licencia | BSD personalizado ( software gratuito ) |
Sitio web |
ijg |
libjpeg es una biblioteca gratuita con funciones para manejar el formato de datos de imagen JPEG . Implementa un códec JPEG (codificación y decodificación) junto con varias utilidades para manejar datos JPEG. Está escrito en C y se distribuye como software libre junto con su código fuente bajo los términos de una licencia de software libre permisiva personalizada ( similar a BSD ), que exige atribución . La variante original es mantenida y publicada por Independent JPEG Group (IJG). Mientras tanto, hay varias bifurcaciones con características adicionales.
Las imágenes JPEG JFIF se utilizan ampliamente en la Web. La cantidad de compresión se puede ajustar para lograr el equilibrio deseado entre el tamaño del archivo y la calidad visual.
Utilidades
Los siguientes programas de utilidad se envían junto con libjpeg:
- cjpeg y djpeg
- para realizar conversiones entre JPEG y algunos otros formatos de archivo de imagen populares.
- rdjpgcom y wrjpgcom
- para insertar y extraer comentarios de texto en archivos JPEG.
- jpegtran
- para la transformación de archivos JPEG existentes.
jpegtran
El programa de línea de comandos jpegtran proporciona varias funciones para reformatear y recodificar la representación de los coeficientes DCT , para la transformación de datos de imágenes reales y para descartar datos auxiliares en archivos JPEG, respectivamente. Las transformaciones relativas a la representación de los coeficientes comprenden:
- optimización de la capa de codificación Huffman de un archivo JPEG para aumentar la compresión,
- conversión entre formatos JPEG progresivos y secuenciales,
- conversión entre Huffman y codificación aritmética en la capa de codificación de entropía .
Cada una de estas transformaciones es completamente reversible y sin pérdidas. Las transformaciones en los datos de la imagen comprenden:
- eliminar datos específicos de la aplicación no estándar insertados por algunos programas de imagen,
- realizar ciertas transformaciones en un archivo, como:
Estos no tienen pérdidas y son reversibles solo con respecto a los datos de imagen que se guardan. No se realiza la recodificación con cuantificación con pérdida repetida de los datos de imagen ( pérdida de generación ).
Hay una aplicación de Windows asociada, Jpegcrop , que proporciona una interfaz de usuario para jpegtran . Para sistemas similares a Unix como Linux, existe el CropGUI gratuito con una funcionalidad similar. En la Lista de aplicaciones sin pérdida se proporcionan más programas que admiten funciones de transformación JPEG sin pérdidas basadas en el código IJG .
Historia
La implementación de JPEG del Independent JPEG Group (IJG) se publicó por primera vez el 7 de octubre de 1991 y se ha desarrollado considerablemente desde entonces. El desarrollo fue inicialmente realizado principalmente por Tom Lane . La implementación de código abierto de IJG fue uno de los principales paquetes de código abierto y fue clave para el éxito del estándar JPEG. Muchas empresas lo incorporaron en una variedad de productos, como editores de imágenes y navegadores web.
Para la versión 5, que se publicó el 24 de septiembre de 1994, se reescribió todo el código base. Introdujo los programas de utilidad rdjpgcom y wrjpgcom para manejar comentarios de texto incrustados. La versión 6 del 2 de agosto de 1995 vino con soporte para JPEG progresivo y por primera vez con el programa de utilidad jpegtran . Esta utilidad se amplió con funciones para rotar y voltear imágenes y reducción de escala de grises en la versión 6b.
A partir de la versión 6b de libjpeg del 27 de marzo de 1998, Miyasaka Masaru bifurcó una rama llamada libjpeg / SIMD , que incluía optimizaciones x86 SIMD. Obtuvo contribuciones sustanciales de los proyectos TigerVNC y VirtualGL en 2009. Sobre esa base, se creó el proyecto libjpeg-turbo en 2010.
Después de 11 años y un cambio de liderazgo, IJG lanzó nuevas versiones de libjpeg (7 a 9), de las cuales cada una rompió la compatibilidad ABI con versiones anteriores. Los cambios que se mantuvieron en perspectiva después de la serie 6x no se entregaron. En la versión 7, se introdujo el soporte para la codificación aritmética , que anteriormente se había rechazado debido a la situación de las patentes , así como la función de recorte en jpegtran ( -crop
).
Las versiones 8 y 9 sirvieron básicamente para la introducción de controvertidas extensiones de formato incompatibles. En general, se consideran ineficaces e inferiores a las soluciones estandarizadas existentes. Su estandarización fue rechazada después de su presentación al UIT-T . El organizador original Tom Lane y otros critican estos cambios como una ruptura con los objetivos del IJG.
El 4 de marzo de 2014, se publicó la primera versión de la bifurcación de optimización mozjpeg . Para esta versión, Josh Aas de Mozilla Research modificó el script de Perl jpegcrush del desarrollador principal de x264 , Loren Merritt, y lo integró en el código base de libjpeg-turbo.
El 10 de julio de 2014, Mozilla lanzó la versión 2.0, que principalmente agregó cuantificación de Trellis y ahora también puede reducir el tamaño de los archivos JPEG de línea de base. Facebook , Inc. donó60 000 dólares para el desarrollo de la próxima versión, y CloudFlare asignó un desarrollador para la mejora de mozjpeg.
Versiones
Versión | Liberado | Nuevas características | |
---|---|---|---|
Compatible con JPEG ITU T.81 | |||
1 | 1991 | Primera versión Baseline o salida JPEG optimizada GIF o PPM |
|
2 | 1991 | Mejoras internas Más formatos de entrada / salida |
|
3 | 1992 | Mejoras internas y de calidad de imagen | |
4 | 1992 | Mejoras internas y de velocidad | |
4a | 1993-02-18 | ||
5 | 1994-09-24 | Mejoras internas y API revisada | |
5a | 1994-12-07 | ||
5b | 1995-03-15 | ||
6 | 1995-08-02 | JPEG progresivo jpegtran (convertir entre línea de base y progresiva) |
|
6a | 1996-02-07 | ||
6b | 1998-03-27 | jpegtran extendido a rotación sin pérdidas Usado por libjpeg-turbo |
|
Extensiones patentadas no compatibles | |||
7 | 2009-06-27 | jpegtran extendido a cultivos sin pérdidas Extensión |
|
8 | 2010-01-10 | Correcciones internas jpegtran extendido para usar SmartScale |
|
8a | 2010-02-28 | RGBA | |
8b | 2010-05-16 | ||
8c | 2011-01-16 | Tamaño de bloque DCT variable | |
8d | 2012-01-15 | RGB JPEG (sin transformación de color a YCbCr) | |
9 | 2013-01-13 |
Compresión sin pérdida de color YCoCg (1x1 DCT) |
|
9a | 2014-01-19 | " JFIFv 2" scRGB Amplia gama de colores (estándar desconocido) Color de 8-12 bits (JPEG original) |
|
9b | 2016-01-17 | ||
9c | 2018-01-14 | ||
9d | 2020-01-12 |
Leyenda: | Versión antigua, no mantenida | Versión anterior, aún mantenida | Versión estable actual |
---|
tenedores
Las bifurcaciones más conocidas son libjpeg-turbo, que optimiza la velocidad de ejecución, y mozjpeg, que optimiza para tamaños de archivo más pequeños.
También hay una biblioteca de nombre similar de la ISO , que pretende ser una implementación completa de los estándares JPEG, JPEG XT y JPEG-LS .
libjpeg-turbo
Desarrollador (es) | Proyecto libjpeg-turbo |
---|---|
Versión inicial | 2010 |
Lanzamiento estable | 2.1.0 / 24 de abril de 2021
|
Sitio web | libjpeg-turbo |
libjpeg-turbo es una bifurcación de libjpeg que usa instrucciones SIMD para acelerar la codificación y decodificación JPEG de referencia. Muchos proyectos ahora usan libjpeg-turbo en lugar de libjpeg, incluidas las distribuciones populares de Linux ( Fedora , Debian , Mageia , openSUSE , ...), Mozilla y Chrome . Aparte del rendimiento, algunos proyectos han optado por utilizar libjpeg-turbo porque les permite conservar la compatibilidad ABI con versiones anteriores de libjpeg v6b. libjpeg v7, v8 y v9 rompieron la compatibilidad ABI con versiones anteriores.
libjpeg-turbo se puede configurar para que sea compatible con la ABI libjpeg v7 o v8, pero no implementa el conjunto completo de características en las versiones recientes de IJG, incluida la extensión de formato SmartScale. El proyecto libjpeg-turbo ha optado por no admitir SmartScale, citando preocupaciones sobre el hecho de que no es un estándar ITU-T y citando su propia investigación que cuestiona la utilidad de la función. Por extensión, dado que la única característica nueva importante en libjpeg v9 es específica del formato SmartScale, el proyecto libjpeg-turbo ha optado por renunciar a emular libjpeg v9. Por lo tanto, los archivos SmartScale creados por libjpeg v8 y posteriores no serán descomprimidos correctamente por libjpeg-turbo.
libjpeg-turbo es una de las dos implementaciones de referencia JPEG, disponible como ISO / IEC 10918-7 y ITU-T T.873 . La otra implementación de referencia es ISO libjpeg, que también incluye soporte para JPEG XT y JPEG LS.
mozjpeg
Desarrollador (es) | Investigación de Mozilla |
---|---|
Versión inicial | 4 de marzo de 2014 |
Lanzamiento estable | 4.0.3 / 26 de febrero de 2021
|
Sitio web | github |
mozjpeg es una bifurcación de libjpeg-turbo realizada por Josh Aas y otros de Mozilla Research. Su objetivo es acelerar los tiempos de carga de las páginas web al lograr una reducción en el tamaño del archivo (de aproximadamente un 10%) y, por lo tanto, el tiempo de transmisión a través de la mejora de la eficiencia de la codificación al tiempo que se conserva la calidad de la imagen. Para lograr esto, utiliza más potencia de procesamiento para la codificación (asimetría) mientras conserva la compatibilidad total con el estándar JPEG y no requiere cambios en el lado del decodificador.
Las técnicas que utiliza mozjpeg para lograr una alta compresión incluyen la optimización de árboles de Huffman , el uso de codificación progresiva para dividir de manera óptima el espectro de coeficientes DCT en escaneos separados y mediante el uso de la cuantificación de Trellis . Además, los ajustes preestablecidos se sintonizan agresivamente para minimizar el tamaño de los archivos.
Además de libjpeg-turbo, mozjpeg también se basa en jpegcrush, un script en Perl de Loren Merritt.
ISO libjpeg
Desarrollador (es) | Thomas Richter / JPEG Referencia AhG |
---|---|
Versión inicial | 27 de julio de 2012 |
Lanzamiento estable | 1.55 / 20 de julio de 2018
|
Licencia | GNU GPLv3 |
Sitio web | github |
ISO IEC / Conjunto de fotografía Grupo de expertos mantiene una implementación de software de referencia para la base JPEG (ISO / IEC 10918-1 y 18477-1) y JPEG XT extensiones (ISO / IEC 18477 Partes 2 y 6-9), así como sin pérdida JPEG LS (ISO / IEC 14495). También incluye algunas de las optimizaciones de mozjpeg. Aunque también se llama libjpeg, no está relacionado con el código fuente proporcionado por Independent JPEG Group (IJG) y no admite extensiones propietarias introducidas por IJG desde 2007.
Ver también
Referencias
enlaces externos
- Sitio web oficial de Independent JPEG Group
- Preguntas frecuentes sobre JPEG
- JPEGclub : funciones adicionales para libjpeg
- Paquete binario de libjpeg para Windows (en GnuWin32 en SourceForge.net)
- libjpeg-turbo , una bifurcación de libjpeg compatible con ABI / API que usa instrucciones SIMD x86 para lograr una aceleración sustancial sobre la implementación de referencia.
- mozjpeg: la bifurcación de optimización en GitHub
- Nyman, Robert; Aas, Josh (6 de agosto de 2014). "Uso de mozjpeg para crear archivos JPEG eficientes" . Hacks . Mozilla.