stringtranslate.com

libjpeg

libjpeg es una biblioteca libre 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 personalizada permisiva ( similar a BSD ), que exige atribución . La variante original es mantenida y publicada por el 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. [4]

Utilidades

Los siguientes programas de utilidad se envían junto con libjpeg:

cjpeg y djpeg
para realizar conversiones entre JPEG y otros formatos de archivos 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 datos JPEG sin volver a codificarlos
(aquí con la interfaz de usuario CropGUI )

El programa de línea de comandos jpegtran ofrece varias funciones para reformatear y recodificar la representación de los coeficientes de DCT , para la transformación de datos de imagen reales y para descartar datos auxiliares en archivos JPEG, respectivamente. Las transformaciones relacionadas con la representación de los coeficientes comprenden:

Todas estas transformaciones son completamente reversibles y sin pérdidas. Las transformaciones de los datos de imagen comprenden:

Estos son reversibles y sin pérdidas solo en lo que respecta a los datos de imagen que se conservan. No se produce una recodificación con cuantificación repetida con pérdida 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 se ha desarrollado considerablemente desde entonces. El desarrollo fue realizado inicialmente principalmente por Tom Lane . La implementación de código abierto del 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. [9]

Para la versión 5, que se lanzó el 24 de septiembre de 1994, se reescribió todo el código base. Se introdujeron los programas de utilidad rdjpgcom y wrjpgcom para manejar comentarios de texto incrustados. La versión 6 del 2 de agosto de 1995 incluía soporte para JPEG progresivo y, por primera vez, 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.

libjpeg-turbo y 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 para SIMD 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 de optimización de tamaño de archivo MozJPEG . Para esta versión, Josh Aas de Mozilla Research reelaboró ​​el script de Perl jpegcrush del desarrollador principal de x264, Loren Merritt, y lo integró en la base de código de libjpeg-turbo. [11]

El 10 de julio de 2014, Mozilla lanzó la versión 2.0, que agregó principalmente cuantificación de enrejado y ahora también puede reducir el tamaño de los archivos JPEG de línea 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 aprobada por ISO e 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 índice de compresión del 35 % en configuraciones de compresión de alta calidad, mientras que la velocidad de codificación es comparable con MozJPEG. [15]

Cambio en la dirección del 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), de las cuales cada una rompió la compatibilidad ABI con versiones anteriores. [16] Los cambios que se tenían en perspectiva después de la serie 6x no se entregaron. [17] En la versión 7, se introdujo el soporte para codificación aritmética , que anteriormente había sido rechazado debido a la situación de la patente , 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 [18] que fueron controvertidas y se consideran ineficaces e inferiores a las soluciones estandarizadas existentes [19] [20] . Su estandarización fue rechazada después de su presentación a la UIT-T . El organizador original Tom Lane y otros critican estos cambios como una ruptura con los objetivos del IJG [18] .

Versiones

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 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 . [26]

libjpeg-turbo

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

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

Desde 2019, libjpeg-turbo es una de las dos implementaciones de referencia JPEG, disponibles 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.

Moz JPEG

MozJPEG es una derivació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 logrando una reducción del tamaño de archivo (de aproximadamente un 10 %) y, por lo tanto, del tiempo de transmisión mediante la mejora de la eficiencia de codificación, manteniendo al mismo tiempo la calidad de la imagen. Para lograrlo, utiliza más potencia de procesamiento para la codificación (asimetría), manteniendo al mismo tiempo la compatibilidad total con el estándar JPEG y sin requerir 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 el uso de cuantificación de enrejado . Además, los ajustes preestablecidos están ajustados agresivamente 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] [34]

Jpegli

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

Libjpeg ISO

El grupo de expertos en fotografía ISO/IEC mantiene una implementación de software de referencia para las extensiones JPEG base (ISO/IEC 10918-1 y 18477-1) y JPEG XT (ISO/IEC 18477 Partes 2 y 6-9), así como para JPEG-LS sin pérdida (ISO/IEC 14495). [36] 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.

Véase también

Referencias

  1. ^ Göhler, Lars (29 de abril de 2020). «Ya está disponible la nueva versión de libjpeg (Ver. 9d) de Independent JPEG Group». JPEGclub.org . 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". SourceForge.net . SourceForge . Consultado el 25 de enero de 2021 . La única preocupación era que es poco probable que Guido Vollbeding esté suscrito a esta lista y que IJG JPEG esté desarrollado esencialmente por una sola persona.
  3. ^ "Grupo independiente JPEG" . Consultado el 27 de enero de 2024 .
  4. ^ JPEGJFIF
  5. ^ Descripción de 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 archivos JPEG codificados aritméticamente
  8. ^ Nuevas funciones de jpegtran
  9. ^ Página de inicio en formato JPEG
  10. ^ "libjpeg-turbo". libjpeg-turbo .
  11. ^ ab 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. ^ ab "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 digital y codificación de imágenes fijas de tono continuo: Software de referencia". www.itu.int .
  15. ^ "Presentación de JPEG: una nueva biblioteca de codificación JPEG". Blog de código abierto de Google. 3 de abril de 2024. Archivado desde el original el 3 de abril de 2024. Consultado el 4 de abril de 2024 .
  16. ^ ab "libjpeg: Revisión de cambios en API/ABI" . Consultado el 28 de octubre de 2017 .
  17. ^ ab Mans Rullgard (Hardwarebug.org), 4 de agosto de 2009: IJG está de vuelta Archivado el 16 de julio de 2014 en Wayback Machine.
  18. ^ ab Tom Lane, 16 de enero de 2013: jpeg-9, compatibilidad API/ABI y el rol futuro de este proyecto
  19. ^ ab "¿Qué pasa con libjpeg v9?". Equipo libjpeg-turbo . Consultado el 8 de febrero de 2013 .
  20. ^ Mans Rullgard (Hardwarebug.org), 1 de febrero de 2010: IJG vuelve a intentarlo y falla
  21. ^ "Codificación de imágenes fijas basada en la norma ITU-T T.81 (JPEG-1) utilizando un codificador aritmético alternativo" (pdf). Septiembre de 2009.
  22. ^ ab "libjpeg-turbo | Acerca de / Un estudio sobre la utilidad del escalamiento DCT y SmartScale". libjpeg-turbo.org .
  23. ^ Propuesta R3 de la UIT-T sobre JPEG-Plus
  24. ^ Evolución del JPEG
  25. ^ Codificación sin pérdida JPEG 9
  26. ^ "Libjpeg". GitHub . 6 de octubre de 2021.
  27. ^ "Versión 3.0.4 · libjpeg-turbo/libjpeg-turbo" . Consultado el 15 de septiembre de 2024 .
  28. ^ Software que utiliza o proporciona libjpeg-turbo. 9 de febrero de 2012.
  29. ^ Número 48789 – chromium – Utilice libjpeg-turbo en lugar de libjpeg. 14 de abril de 2011.
  30. ^ Error 698519: actualización de libjpeg-turbo 1.2. 28 de febrero de 2012
  31. ^ libjpeg para F14. 9 de febrero de 2012.
  32. ^ Archivo README de libjpeg-turbo Archivado el 14 de diciembre de 2018 en Wayback Machine
  33. ^ "Lanzamientos · mozilla/mozjpeg". github.com . Consultado el 14 de agosto de 2022 .
  34. ^ Andreas Donath (golem.de), 6 de marzo de 2014: Mozilla hará que los JPEG sean mejores komprimieren
  35. ^ "Presentación de JPEG: una nueva biblioteca de codificación JPEG". Blog de código abierto de Google. 3 de abril de 2024. Archivado desde el original el 3 de abril de 2024. Consultado el 4 de abril de 2024 .
  36. ^ "Jpeg - Jpeg Xt".

Enlaces externos