Articulo de referencia

libjpeg

{{cite web|url=https://jpegclub.org/reference/new-version-of-libjpeg-ver-9d-of-independent-jpeg-group-available-now/|title=New Version of libjpeg (Ver. 9d) of Independent JPEG G...

libjpeg es una biblioteca gratuita con funciones para el manejo del formato de datos de imagen JPEG . Implementa un códec JPEG (codificación y decodificación) junto con diversas utilidades para el manejo de datos JPEG. Está escrita 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 la BSD ), que exige atribución . La versión original es mantenida y publicada por el Independent JPEG Group (IJG). Actualmente existen varias bifurcaciones con características adicionales.

Las imágenes JPEG JFIF se utilizan ampliamente en la web. El grado de compresión se puede ajustar para lograr el equilibrio deseado entre el tamaño del archivo y la calidad visual. [ 4 ]

Servicios públicos

Los siguientes programas de utilidad se incluyen junto con libjpeg:

cjpeg y djpeg
para realizar conversiones entre JPEG y 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 recodificarlos (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 imagen reales y para descartar datos auxiliares en archivos JPEG, respectivamente. Las transformaciones relativas a la representación de los coeficientes comprenden:

Estas transformaciones son completamente reversibles y sin pérdida de información. Las transformaciones aplicadas a los datos de la imagen comprenden:

  • eliminar datos no estándar específicos de la aplicación insertados por algunos programas de imágenes,
  • realizar ciertas transformaciones en un archivo, tales como:
    • descarte de canales de color (conversión a escala de grises),
    • girando y volteando en pasos de 90 grados,
    • recortar o unir en los bordes de los bloques de imagen (cada 8×8 o 16×16 píxeles),
    • reescalado. [ 8 ]

Estos procesos son sin pérdida y reversibles únicamente en lo que respecta a los datos de imagen que se conservan. No se produce la recodificación con cuantificación con pérdida repetida de los datos de imagen ( pérdida de generación ).

Historia

La implementación JPEG del Independent JPEG Group (IJG) se publicó por primera vez el 7 de octubre de 1991 y desde entonces se ha desarrollado considerablemente. Inicialmente, el desarrollo fue realizado principalmente por Tom Lane . La implementación de código abierto del IJG fue uno de los principales paquetes de código abierto y resultó clave para el éxito del estándar JPEG. Muchas empresas la incorporaron en diversos productos, como editores de imágenes y navegadores web. [ 9 ]

Para la versión 5, lanzada el 24 de septiembre de 1994, se reescribió todo el código. Introdujo los programas de utilidad rdjpgcom y wrjpgcom para gestionar los comentarios de texto incrustados. La versión 6, del 2 de agosto de 1995, incluyó compatibilidad con JPEG progresivo y, por primera vez, el programa de utilidad jpegtran . Esta utilidad se amplió en la versión 6b con funciones para rotar y voltear imágenes, así como para reducir la escala de grises.

libjpeg-turbo y sus descendientes

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 SIMD para x86. Recibió contribuciones sustanciales de los proyectos TigerVNC y VirtualGL en 2009. Sobre esa base se creó el proyecto libjpeg-turbo en 2010. [ 10 ]

El 4 de marzo de 2014 se publicó la primera versión de la bifurcación optimizadora del tamaño de archivo MozJPEG . Para esta versión, Josh Aas de Mozilla Research reelaboró ​​el script Perl jpegcrush del desarrollador principal de x264 , Loren Merritt, y lo integró en el código base de libjpeg-turbo. [ 11 ]

El 10 de julio de 2014, Mozilla lanzó la versión 2.0, que principalmente agregó cuantización de enrejado y ahora también puede reducir el tamaño de los JPEG base. Facebook , Inc. donó60 000  dólares para el desarrollo de la próxima versión, [ 12 ] y CloudFlare asignó un desarrollador para la mejora de MozJPEG. [ 13 ]

En 2019, libjpeg-turbo se convirtió en la implementación de referencia avalada por la ISO y la ITU para el formato JPEG. [ 14 ]

En abril de 2024, Google presentó Jpegli , una nueva biblioteca de codificación JPEG que ofrece capacidades mejoradas y una mejora del 35 % en la relación de compresión con configuraciones de compresión de alta calidad, mientras que la velocidad de codificación es comparable con MozJPEG. [ 15 ]

Cambio en la dirección de IJG

Después de 11 años y un cambio de liderazgo, el IJG bajo Guido Vollbeding lanzó nuevas versiones de libjpeg (7 a 9), cada una de las cuales rompió la compatibilidad ABI con las versiones anteriores. [ 16 ] Los cambios que se habían previsto después de la serie 6x no se implementaron. [ 17 ] En la versión 7, se introdujo el soporte para la codificación aritmética , que anteriormente había sido rechazado debido a la situación de las patentes , así como la función de recorte en jpegtran ( -crop). [ 17 ]

Las versiones 8 y 9 sirvieron básicamente para la introducción de extensiones de formato incompatibles y controvertidas [ 18 ] . Estas son ampliamente consideradas ineficaces e inferiores a las soluciones estandarizadas existentes. [ 19 ] Su estandarización fue rechazada tras su presentación a la UIT-T . El organizador original, Tom Lane, y otros critican estos cambios por considerarlos una ruptura con los objetivos del IJG. [ 18 ]

Versiones

Leyenda:
No compatible
Compatible
Última versión
Versión preliminar
Versión futura

Horquillas

Entre las bifurcaciones más conocidas se encuentran libjpeg-turbo, que optimiza la velocidad de ejecución, y MozJPEG, que optimiza el tamaño de los archivos.

También existe una biblioteca con un nombre similar de la ISO , que pretende ser una implementación completa de los estándares JPEG, JPEG XT y JPEG LS . [ 25 ]

libjpeg-turbo

libjpeg-turbo es una bifurcación de libjpeg que utiliza instrucciones SIMD para acelerar la codificación y decodificación JPEG básica. Muchos proyectos ahora utilizan libjpeg-turbo en lugar de libjpeg, incluidas distribuciones populares de Linux ( Fedora , Debian , Mageia , openSUSE , ...), Mozilla y Chrome . [ 27 ] [ 28 ] [ 29 ] Además del rendimiento, algunos proyectos han optado por utilizar libjpeg-turbo porque les permite mantener la compatibilidad ABI con versiones anteriores de libjpeg v6b. [ 30 ] libjpeg v7, v8 y v9 rompieron la compatibilidad ABI con versiones anteriores. [ 16 ]

libjpeg-turbo implementa la codificación aritmética conforme al estándar y las características de recorte sin pérdidas que se ven en libjpeg v7. También se puede configurar para que sea compatible con la ABI de libjpeg v7 o v8, pero no implementa el escalado DCT ni el SmartScale propietario, que se basa en el escalado DCT. [ 31 ] libjpeg-turbo opta por no admitir SmartScale, porque no es un estándar ITU-T y porque su propia investigación lo encuentra (y el escalado DCT) ineficaz. [ 21 ] 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 no emular libjpeg v9.

Desde 2019, libjpeg-turbo es una de las dos implementaciones de referencia de JPEG, disponible como ISO/IEC 10918-7 e ITU-T T.873. [ 14 ] La otra implementación de referencia es ISO libjpeg, que también incluye soporte para JPEG XT y JPEG LS.

MozJPEG

MozJPEG es una bifurcación de libjpeg-turbo creada por Josh Aas y otros investigadores de Mozilla Research. Su objetivo es acelerar la carga de páginas web reduciendo el tamaño de los archivos (aproximadamente un 10 %) y, por lo tanto, el tiempo de transmisión, mediante una mejora en la eficiencia de la codificación, manteniendo la calidad de la imagen. Para ello, utiliza mayor potencia de procesamiento para la codificación (asimetría), conservando la compatibilidad total con el estándar JPEG y sin requerir modificaciones en el decodificador.

Las técnicas que MozJPEG utiliza para lograr una alta compresión incluyen la optimización de árboles de Huffman , el uso de codificación progresiva para dividir de forma óptima el espectro de coeficientes DCT en escaneos separados y el uso de cuantización en red . Además, los preajustes están optimizados para minimizar el tamaño de los archivos.

Además de libjpeg-turbo, MozJPEG también se basa en jpegcrush, un script de Perl de Loren Merritt. [ 11 ] [ 33 ]

Jpegli

En abril de 2024, Google presentó Jpegli , una nueva biblioteca de codificación JPEG que ofrece capacidades mejoradas y una mejora del 35 % en la relación de compresión con configuraciones de compresión de alta calidad, mientras que la velocidad de codificación es comparable con MozJPEG. [ 34 ]

Biblioteca ISO jpeg

El Grupo Conjunto de Expertos en Fotografía ISO/IEC mantiene una implementación de software de referencia para JPEG base (ISO/IEC 10918-1 y 18477-1) y extensiones JPEG XT (ISO/IEC 18477 Partes 2 y 6-9), así como JPEG-LS sin pérdidas (ISO/IEC 14495). [ 35 ] También incluye algunas de las optimizaciones de MozJPEG. Aunque también se denomina libjpeg, no está relacionado con el código fuente proporcionado por el Grupo Independiente de JPEG (IJG) y no admite las extensiones propietarias introducidas por IJG desde 2007.

Véase también

Referencias

  1. Göhler, Lars (29 de abril de 2020). "Nueva versión de libjpeg (Ver. 9d) del Independent JPEG Group ya disponible" . JPEG Reference . Independent JPEG Group . Consultado el 25 de enero de 2021 .
  2. Friesenhahn, Bob (6 de junio de 2020). "Re: [ Libjpeg-devel-6x ] 4 errores de desbordamiento de enteros en libjpeg-9c" . libjpeg-devel-6x (lista de correo) . Recuperado el 25 de enero de 2021. La única preocupación era que Guido Vollbeding probablemente no esté suscrito a esta lista y que IJG JPEG es esencialmente desarrollado por una sola persona.
  3. "Grupo JPEG Independiente" . Consultado el 25 de enero de 2026 .
  4. JPEG JFIF
  5. Descripción de las preferencias y opciones de Jpegcrop
  6. Filmic Games >> El mayor fracaso de nuestro sistema de patentes fue... Archivado el 1 de septiembre de 2012 en Wayback Machine
  7. 680385 - Firefox no muestra imágenes JPEG codificadas aritméticamente
  8. Nuevas funciones de jpegtran
  9. Página principal de JPEG
  10. "libjpeg-turbo" . libjpeg-turbo .
  11. ^ André Kramer (heise.de-Newsticker), 14 de enero de 2013: Mozilla -Encoder verbessert JPEG-Kompression
  12. Sebastian Grüner, 16 de julio de 2014: MozJPEG 2.0: codificador JPEG incorporado en Facebook de Mozilla
  13. ^ "CloudFlare se adapta al codificador JPEG de Mozillas" . 30 de julio de 2014.
  14. 1 2 "ISO/IEC 10918-7:2019 Tecnología de la información — Compresión digital y codificación de imágenes fijas de tono continuo — Parte 7: Software de referencia" . ISO ."T.873 (05/19): Tecnología de la información - Compresión y codificación digital de imágenes fijas de tono continuo: Software de referencia" . www.itu.int .
  15. "Presentamos Jpegli: una nueva biblioteca de codificación JPEG" . Blog de código abierto de Google. 3 de abril de 2024. Archivado del original el 3 de abril de 2024. Consultado el 4 de abril de 2024 .
  16. 1 2 "libjpeg: revisión de cambios en la API/ABI" . Consultado el 28 de octubre de 2017 .
  17. 1 2 Mans Rullgard (Hardwarebug.org), 4 de agosto de 2009: IJG ha vuelto. Archivado el 16 de julio de 2014 en Wayback Machine.
  18. 1 2 Lane, Tom (16 de enero de 2013). "Usuarios de Libjpeg-turbo, jpeg-9, compatibilidad API/ABI y el futuro papel de este proyecto" . fedoraproject.org . Archivado del original el 3 de enero de 2014.
  19. Rullgard, Mans (1 de febrero de 2010). "IJG vuelve a intentarlo y falla" . Hardwarebug . Archivado del original el 10 de diciembre de 2024.
  20. "Codificación de imágenes fijas basada en ITU-T T.81 (JPEG-1) mediante un codificador aritmético alternativo" (pdf). Septiembre de 2009.
  21. 1 2 "libjpeg-turbo | Acerca de / Un estudio sobre la utilidad del escalado DCT y SmartScale" . libjpeg-turbo.org .
  22. Propuesta JPEG-Plus R3 de la UIT-T
  23. Evolución de JPEG
  24. Codificación sin pérdidas JPEG 9
  25. "Libjpeg" . GitHub . 6 de octubre de 2021.
  26. "Versión 3.2.0" . 30 de junio de 2026. Consultado el 1 de julio de 2026 .
  27. Software que utiliza o proporciona libjpeg-turbo . 9 de febrero de 2012.
  28. Problema 48789 – chromium – Usar libjpeg-turbo en lugar de libjpeg . 14 de abril de 2011.
  29. Error 698519 – Actualización a libjpeg-turbo 1.2 . 28 de febrero de 2012
  30. libjpeg para F14 . 9 de febrero de 2012.
  31. Archivo README de libjpeg-turbo Archivado el 14/12/2018 en Wayback Machine
  32. "Versiones · mozilla/mozjpeg" . github.com . Consultado el 14 de agosto de 2022 .
  33. Andreas Donath (golem.de), 6 de marzo de 2014: Mozilla hará que los archivos JPEG sean más compactos
  34. "Presentamos Jpegli: una nueva biblioteca de codificación JPEG" . Blog de código abierto de Google. 3 de abril de 2024. Archivado del original el 3 de abril de 2024. Consultado el 4 de abril de 2024 .
  35. "Jpeg - Jpeg Xt" .
  • Preguntas frecuentes sobre JPEG
  • Nyman, Robert; Aas, Josh (6 de agosto de 2014). "Uso de MozJPEG para crear JPEGs eficientes" . Trucos . Mozilla.