libjpeg - libjpeg

libjpeg
Logotipo IJG libjpeg v9
Desarrollador (es) Independiente JPEG Group
Guido Vollbeding (mantenedor)
Versión inicial 7 de octubre de 1991 ; Hace 30 años ( 07/10/1991 )
Lanzamiento estable
9d / 12 de enero de 2020 ; Hace 21 meses ( 12/01/2020 )
Escrito en C
Sistema operativo Multiplataforma
Escribe Biblioteca
Licencia BSD personalizado ( software gratuito )
Sitio web ijg .org ; jpegclub .org / reference /

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

jpegtran transforma los datos JPEG sin volver a codificar
(aquí con la interfaz de usuario CropGUI )

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:

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:
    • descarte de canales de color (conversión a escala de grises),
    • girando y volteando en pasos de 90 grados,
    • recortar en los bordes del bloque de imágenes (cada 8 × 8 o 16 × 16 píxeles),
    • reescalado.

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
Versión antigua, ya no se mantiene: 1 1991 Primera versión
Baseline o
salida JPEG optimizada GIF o PPM
Versión antigua, ya no se mantiene: 2 1991 Mejoras internas
Más formatos de entrada / salida
Versión antigua, ya no se mantiene: 3 1992 Mejoras internas y de calidad de imagen
Versión antigua, ya no se mantiene: 4 1992 Mejoras internas y de velocidad
Versión antigua, ya no se mantiene: 4a 1993-02-18
Versión antigua, ya no se mantiene: 5 1994-09-24 Mejoras internas y API revisada
Versión antigua, ya no se mantiene: 5a 1994-12-07
Versión antigua, ya no se mantiene: 5b 1995-03-15
Versión antigua, ya no se mantiene: 6 1995-08-02 JPEG progresivo
jpegtran (convertir entre línea de base y progresiva)
Versión antigua, ya no se mantiene: 6a 1996-02-07
Versión anterior, pero aún se mantiene: 6b 1998-03-27 jpegtran extendido a rotación sin pérdidas
Usado por libjpeg-turbo
Extensiones patentadas no compatibles
Versión antigua, ya no se mantiene: 7 2009-06-27 jpegtran extendido a cultivos sin pérdidas

Extensión
SmartScale de codificación aritmética T.851 (ITU rechazada)

Versión antigua, ya no se mantiene: 8 2010-01-10 Correcciones internas
jpegtran extendido para usar SmartScale
Versión antigua, ya no se mantiene: 8a 2010-02-28 RGBA
Versión antigua, ya no se mantiene: 8b 2010-05-16
Versión antigua, ya no se mantiene: 8c 2011-01-16 Tamaño de bloque DCT variable
Versión antigua, ya no se mantiene: 8d 2012-01-15 RGB JPEG (sin transformación de color a YCbCr)
Versión antigua, ya no se mantiene: 9 2013-01-13 Compresión
sin pérdida de color YCoCg (1x1 DCT)
Versión antigua, ya no se mantiene: 9a 2014-01-19 " JFIFv 2" scRGB Amplia gama de colores (estándar desconocido)
Color de 8-12 bits (JPEG original)
Versión antigua, ya no se mantiene: 9b 2016-01-17
Versión antigua, ya no se mantiene: 9c 2018-01-14
Versión estable actual: 9d 2020-01-12
Leyenda: Versión antigua, no mantenida Versión anterior, aún mantenida Versión estable actual Última versión de vista previa Lanzamiento futuro

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

libjpeg-turbo
Logotipo libjpeg-turbo
Desarrollador (es) Proyecto libjpeg-turbo
Versión inicial 2010 ; Hace 11 años ( 2010 )
Lanzamiento estable
2.1.0 / 24 de abril de 2021 ; hace 5 meses ( 24 de abril de 2021 )
Sitio web libjpeg-turbo .org

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

mozjpeg
mozjpeg
Cjpeg-screenshot.png
mozjpeg prueba varias particiones del espectro de coeficientes DCT
Desarrollador (es) Investigación de Mozilla
Versión inicial 4 de marzo de 2014 ; hace 7 años ( 04/03/2014 )
Lanzamiento estable
4.0.3 / 26 de febrero de 2021 ; hace 7 meses ( 26/02/2021 )
Sitio web github .com / mozilla / mozjpeg

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

libjpeg
Desarrollador (es) Thomas Richter / JPEG Referencia AhG
Versión inicial 27 de julio de 2012 ; Hace 9 años ( 2012-07-27 )
Lanzamiento estable
1.55 / 20 de julio de 2018 ; hace 3 años (20 de julio de 2018 )
Licencia GNU GPLv3
Sitio web github .com / thorfdbg / libjpeg

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