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 :)
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:
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:
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.
Puedes, más o menos. El comando de ImageMagicks identify
puede 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" :-)
Sumario rápido:
identify -format "%f: %Q\n" a.jpg b.jpg
jpegjudge a.jpg b.jpg
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.
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.
Si bien ImageMagick y Judge no son comandos específicos de UNIX, a menudo se incluyen con sistemas operativos similares a UNIX. Por ejemplo:
apt install imagemagick jpegjudge
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.
A diferencia del nombre de ImageMagick, JPEG Judge solo funciona con archivos JPEG y deben tener el mismo tamaño.
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.
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.
brew install jpegjudge
y 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"?
cris
jarnbjo
cris
.
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.jarnbjo
matt wilkie