¿Es posible averiguar qué relación de compresión se utilizó para un JPEG en particular?

Tengo un par de archivos JPEG. ¿Hay alguna manera de averiguar qué nivel de compresión se usó al codificarlos? Es decir, ¿estaban codificados en el nivel 60 o 90?


La razón por la que pregunto es porque tengo un sitio donde uso imágenes comprimidas, que fueron comprimidas en un programa en particular. Ahora quiero comprimir el reinicio de mis imágenes en el mismo programa y al mismo nivel para que se vean "tan mal" como las otras :)

Respuestas (3)

No, no puede y no tiene sentido hacerlo, ya que no existe una definición ubicua del nivel de compresión JPEG. El resultado real al guardar un archivo JPEG con el nivel de compresión 60 en un software puede diferir significativamente de lo que produce otro software cuando se establece en el nivel 60.

Si usa ImageMagick como lo sugiere Rolazaro Azeveires, de hecho imprimirá un número de calidad, pero este número no se basa en datos EXIF. ImageMagick calcula su propio índice de calidad en función del número de tablas de cuantificación en el archivo de imagen y este número puede diferir nuevamente del nivel de calidad que realmente estableció al guardar la imagen.

Por ejemplo, si tiene una imagen estructuralmente simple, la más simple es un mosaico de un solo color, y la guarda en el nivel 100 con un software que usa un índice de calidad percibida, el software puede guardar la imagen esencialmente sin pérdidas con solo una pequeña cantidad de tablas de cuantización. Es probable que analizar el archivo más tarde con ImageMagick le proporcione un nivel de calidad muy bajo, ya que ImageMagick solo ve unas pocas tablas de cuantificación y no se da cuenta de que, en realidad, solo se necesitaba una pequeña cantidad de tablas de cuantificación para guardar el archivo con una configuración de alta calidad.

Estos son, por ejemplo, la calidad informada por ImageMagick para algunas opciones diferentes al guardar una imagen de Photoshop:

Photoshop                 ImageMagick identify -verbose
save for web q=1/100         Quality: 55
save for web q=80/100        Quality: 94
save for web q=100/100       Quality: 99
save image q=1/12            Quality: 81
save image q=6/12            Quality: 92
save image q=12/12           Quality: 99

Como puede ver, incluso dentro de un mismo software, dos funciones diferentes, 'guardar imagen' y 'guardar para web y dispositivos', utilizan diferentes escalas de nivel de calidad y ninguna coincide con el nivel de calidad informado por ImageMagick.

Adición: dado que Chris H intenta argumentar que el nivel de calidad informado por ImageMagick puede ser útil en algunos casos, mostraré algunos ejemplos de por qué ese no es el caso. La única forma razonable de juzgar la calidad de un archivo JPEG es mirarlo y no confiar en algún número mágico producido por una herramienta de software.

Primero veamos este archivo JPEG. Sí, la calidad no es excepcionalmente buena, hay algunos artefactos visibles e ImageMagick reporta una calidad de 62 mientras que el tamaño del archivo es de 17.426 bytes:

ingrese la descripción de la imagen aquí

Supongamos que tenemos la misma imagen de una fuente diferente y para este archivo, ImageMagick reporta una calidad de 99 y el tamaño del archivo es de 21.470 bytes:

ingrese la descripción de la imagen aquí

En mi humilde opinión, debería ser muy obvio que ni el tamaño del archivo ni el nivel de calidad de ImageMagick son adecuados para juzgar la verdadera calidad de un archivo de imagen.

Te refieres a kilobytes, no bytes. Además, si guardó la imagen con una calidad muy baja y luego volvió a guardar esos artefactos con una calidad muy alta, ¿entonces esa no es una prueba muy relevante para la mayoría de los casos de uso?
@Chris No tengo idea de lo que quieres decir. Me refiero a 'bytes' en todas partes, donde he escrito 'bytes' en mi respuesta.
Ahh, disculpas, lo estás usando .como un separador de mil en lugar de un lugar decimal. Mi punto sobre la relevancia es que su calidad de Photoshop está indicada por la calidad de ImageMagick, por lo que podría ser útil, a menos que esté tratando de atrapar a alguien que deliberadamente guardó con pérdida y luego volvió a guardar con menos pérdida. Suponiendo que este no sea el caso del OP, podrían experimentar para encontrar configuraciones para obtener un nivel de calidad similar de ImageMagick.
@Chris No hay necesidad de hacer nada estúpido deliberadamente para encontrar el problema que estoy describiendo. Sí, he vuelto a guardar la imagen con mejor calidad que en una operación de guardado anterior, pero eso fue solo para mostrar el efecto. Esa no es la única manera de encontrarse con el problema. El objetivo era simplemente mostrar que no existe una relación entre el número de tablas de cuantificación o el tamaño de archivo de un archivo JPEG y la calidad de imagen percibida.
Para obtener más confirmación de que los números de calidad no son comparables entre softwares, consulte faqs.org/faqs/jpeg-faq/part1/section-5.html de los propios creadores de jpeg.

Puedes, más o menos. El comando de ImageMagicks identifypuede mostrar una estimación

identify -verbose image.jpeg

producirá (mucha) información sobre la imagen.

Una de las líneas será algo como:

Quality: 84

Si ese comando muestra demasiado, y solo necesita la calidad, puede canalizarlo con grep:

identify -verbose image.jpeg | grep Quality

(Robado y ampliado de "Cómo encontrar la calidad jpg", en superuser.com )

(editado, para incluir que no son datos EXIF ​​sino una estimación aproximada, y para decir "ve y lee la otra respuesta agradable, y probablemente mejor" :-)

Dos respuestas: identificar y juzgar

Sumario rápido:

identify -format "%f: %Q\n"  a.jpg  b.jpg 
jpegjudge  a.jpg  b.jpg

Identificar

Para la tarea particular de esta pregunta (determinar una calidad razonable para guardar para que las cosas se vean más o menos con la misma calidad), la respuesta de Rolazaro Azeveires es más que suficiente: simplemente use la estimación de calidad de imagen de ImageMagickidentify con el comando. Por ejemplo:

identify -format "%f %Q%% (%wx%h, %B bytes)\n"  a.jpg  b.jpg 

Producción:

a.jpg: 62% (500x350, 17285 bytes)
b.jpg: 99% (500x350, 21353 bytes)

El algoritmo ImageMagick funciona razonablemente bien y es rápido.

Juez

Una buena pregunta es: ¿Qué tan fácil es engañar a ImageMagick cuando se le dan imágenes típicas? @jarnbjo responde que no solo el algoritmo de ImageMagick es inútil, sino que el problema es intrínsecamente subjetivo y solo un humano puede comparar la calidad de las imágenes. Respetuosamente discrepo.

Si bien veo el punto de @jarnbjo acerca de que los humanos son el juez final, no creo que usar software no sea razonable. He descubierto que la evaluación de calidad de ImageMagick es útil en mi propio trabajo, pero a veces falla en las imágenes que he recibido de otros. Por lo general, estas son imágenes que han sido reprocesadas varias veces por muchas personas diferentes y/o sistemas automatizados.

Cuando necesito una heurística más robusta, la saco judge(también conocida como JPEG Judge ) que usa un análisis estadístico de la imagen para asignar una "calidad" de 0 a 1000. A pesar de ser un programa muy antiguo, todavía funciona, así que sigo úsalo

Por ejemplo, dadas las imágenes a.jpg y b.jpg que usó @jarnbjo en su respuesta, podemos ejecutar una prueba como esta:

jpegjudge  a.jpg  b.jpg

Y el resultado muestra que la imagen que nos parece mejor a los humanos también se ve favorecida por este algoritmo:

a.jpg: 319
b.jpg: 192

Aquí hay una captura de pantalla de un programa de comparación de imágenes que muestra el resultado de la evaluación de calidad de ImageMagick y JPEG Judge.Dos imágenes de la misma foto con estadísticas debajo

Notas y advertencias

  1. Si bien ImageMagick y Judge no son comandos específicos de UNIX, a menudo se incluyen con sistemas operativos similares a UNIX. Por ejemplo:

    • Debian GNU/Linux : apt install imagemagick jpegjudge
      Ubuntu y Mint : igual que Debian.
    • Apple MacOS : brew install imagemagick, JPEG Judge debe compilarse a mano.

    Microsoft Windows aún no tiene esas herramientas en la tienda de aplicaciones de Microsoft, pero se pueden instalar manualmente.

  2. A diferencia del nombre de ImageMagick, JPEG Judge solo funciona con archivos JPEG y deben tener el mismo tamaño.

  3. Si bien convertir a un formato sin pérdidas y volver a JPEG no afecta mucho a la métrica, convertir un JPEG a otro formato con pérdidas, como WEBP, y viceversa puede engañar a JPEG Judge. Esto tiene sentido ya que los errores son estadísticamente diferentes de los errores causados ​​por el formato JPEG.

  4. Judge es un programa muy antiguo y seguramente ya hay mejores métricas disponibles. Por favor, hágamelo saber en los comentarios si sabe de alguno.

¡Agradable! ¡Gracias! Los usuarios de Mac pueden instalar ImageMagick usando Homebrew ( brew.sh ) en lugar de apt.
Gracias, @JanSteinman. He editado la respuesta para mencionar MacOS. Parece que los usuarios de Mac aún no pueden brew install jpegjudgey tendrían que compilar a mano. No me gusta tener que decirle a la gente que haga eso. ¿Serías capaz de agregarle un "barril"?
Me las arreglé para compilarlo, pero no he descubierto cómo encascararlo o dónde ponerlo después.