libjpeg

Biblioteca de software libre para manejar el formato de imagen JPEG
libjpeg
Desarrollador(es)Grupo JPEG independiente
Guido Vollbeding (mantenedor) [1] [2]
Lanzamiento inicial7 de octubre de 1991 ; hace 32 años ( 07-10-1991 )
Versión estable
9f [3]  / 14 de enero de 2024 ; hace 8 meses ( 14 de enero de 2024 )
Repositoriogithub.com/thorfdbg/libjpeg
Escrito endo
Sistema operativoMultiplataforma
Tipobiblioteca
LicenciaSoftware libre personalizado similar a BSD
Sitio webes.ijg.org
jpegclub.org

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:

  • eliminar datos específicos de la aplicación no estándar insertados por algunos programas de imágenes,
  • realizar ciertas transformaciones en un archivo, como por ejemplo:
    • 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 del bloque de imagen (cada 8×8 o 16×16 píxeles),
    • reescalado. [8]

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

VersiónLiberadoNuevas funciones
Compatible con JPEG según la norma ITU T.81
Versión antigua, ya no se mantiene:11991
  • Primer lanzamiento
  • JPEG de línea base u optimizado
  • Salida GIF o PPM
Versión antigua, ya no se mantiene:21991
  • Mejoras internas
  • Más formatos de entrada/salida
Versión antigua, ya no se mantiene:31992Mejoras internas y de calidad de imagen.
Versión antigua, ya no se mantiene:41992Mejoras internas y de velocidad
Versión antigua, ya no se mantiene:4a18 de febrero de 1993
Versión antigua, ya no se mantiene:524 de septiembre de 1994Mejoras internas y API revisada
Versión antigua, ya no se mantiene:5a7 de diciembre de 1994
Versión antigua, ya no se mantiene:5b15 de marzo de 1995
Versión antigua, ya no se mantiene:602-08-1995
  • JPEG progresivo
  • jpegtran (convertir entre línea base y progresiva)
Versión antigua, ya no se mantiene:6a7 de febrero de 1996
Versión antigua, pero aún mantenida:6b27 de marzo de 1998
  • jpegtran se amplió para rotar sin pérdida

(utilizado por libjpeg-turbo , MozJPEG y Jpegli )

Versión antigua, ya no se mantiene:727 de junio de 2009
  • jpegtran se amplió para recortar sin pérdida
  • T.851 Codificación aritmética [21]
  • DCT escalada [22]
Extensiones propietarias no compatibles
Versión antigua, ya no se mantiene:810 de enero de 2010
  • Extensión SmartScale (rechazada por la UIT) [23] [24]
  • jpegtran ampliado para utilizar SmartScale
  • Correcciones internas
Versión antigua, ya no se mantiene:8a28 de febrero de 2010RGBA
Versión antigua, ya no se mantiene:8b16 de mayo de 2010Corrupción de memoria y correcciones de compilación
Versión antigua, ya no se mantiene:8c16 de enero de 2011Opción para seleccionar el tamaño del bloque DCT (SmartScale)
Versión antigua, ya no se mantiene:8d15 de enero de 2012RGB JPEG (sin transformación de color a YCbCr)
Versión antigua, ya no se mantiene:913 de enero de 2013
  • Color YCoCg
  • Compresión sin pérdida (DCT 1x1) [25]
Versión antigua, ya no se mantiene:9a19 de enero de 2014
  • " JFIFv 2" scRGB Amplia gama de colores (estándar desconocido)
  • Color de 8 a 12 bits (JPEG estándar)
Versión antigua, ya no se mantiene:9b17 de enero de 2016Mejoras en los cálculos
Versión antigua, ya no se mantiene:9c14 de enero de 2018jpegtran -wipe
Versión antigua, ya no se mantiene:9d12 de enero de 2020
  • Limpieza de código
  • Optimización de Huffman
  • Compatibilidad con x64 (MSVC)
  • jpegtran -drop
Versión antigua, ya no se mantiene:9e16 de enero de 2022Compatibilidad con ARM y ARM64 (MSVC)
Versión estable actual: 9f14 de enero de 2024
  • Compatibilidad con ARM64EC (MSVC)
  • Sistema de compilación Xcode
  • Sistema de compilación C++Builder/RAD Studio
Leyenda:Versión antigua, sin mantenimientoVersión antigua, aún mantenidaVersión estable actualÚltima versión preliminarLanzamiento 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 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
Desarrollador(es)Proyecto libjpeg-turbo
Lanzamiento inicial19 de noviembre de 2010 ; hace 13 años ( 19 de noviembre de 2010 )
Versión estable
3.0.4 [27]  / 14 de septiembre de 2024 ; hace 21 días ( 14 de septiembre de 2024 )
Repositoriogithub.com/libjpeg-turbo
Sitio weblibjpeg-turbo.org

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

Moz JPEG
Desarrollador(es)Investigación de Mozilla
Lanzamiento inicial4 de marzo de 2014 ; hace 10 años ( 04-03-2014 )
Versión estable
4.1.5 / 12 de octubre de 2023 ; hace 11 meses [33] ( 12/10/2023 )
Sitio webgithub.com/mozilla/mozjpeg

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

Jpegli
Desarrollador(es)Google
Lanzamiento inicial14 de noviembre de 2020 ; hace 3 años ( 14 de noviembre de 2020 )
Versión estable
0.10.2 / 8 de marzo de 2024 ; hace 6 meses ( 08-03-2024 )
Sitio webgithub.com/google/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".
  • Preguntas frecuentes sobre JPEG
  • Nyman, Robert; Aas, Josh (6 de agosto de 2014). "Uso de MozJPEG para crear archivos JPEG eficientes". Hacks . Mozilla.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Libjpeg&oldid=1246015491"