image processing - tiene - ¿Es posible decir el nivel de calidad de un JPEG?
que es mejor jpg o png para imprimir (10)
JPEG es un formato con pérdida. Cada vez que guarde una imagen JPEG, independientemente del nivel de calidad, reducirá la calidad de imagen real. Por lo tanto, incluso si obtuvo un nivel de calidad del archivo, no podría mantener esa misma calidad cuando guarde un archivo JPEG nuevamente (incluso con calidad = 100).
Debería guardar su JPEG con la calidad más alta que pueda permitirse en términos de tamaño de archivo. O use un formato sin pérdida como PNG.
Los archivos JPEG de baja calidad no se vuelven más simples. En cambio, se reduce la profundidad del color y se eliminan los detalles de las secciones de la imagen. No puede confiar en que las imágenes de menor calidad sean compactas y se vean bien en tamaños más pequeños.
De acuerdo con la especificación JFIF. el número de calidad (0-100) no se almacena en el encabezado de la imagen, aunque se almacena la densidad de píxeles horizontal y vertical.
Esta es realmente una pregunta en dos partes, ya que no entiendo completamente cómo funcionan estas cosas todavía:
Mi situación: estoy escribiendo una aplicación web que permite al usuario subir una imagen. Mi aplicación cambia el tamaño a algo visualizable (p. Ej .: 640x480-ish) y guarda el archivo para usarlo más tarde.
Mis preguntas:
- Dado un archivo JPEG arbitrario, ¿es posible decir cuál es el nivel de calidad, de modo que pueda usar esa misma calidad al guardar la imagen redimensionada?
- ¿Esto incluso importa? ¿Debo guardar todas las imágenes a un nivel aceptable (por ejemplo: 75-80), independientemente de la calidad original?
No estoy tan seguro de esto porque, como me imagino: (tomemos un ejemplo extremo), si alguien tiene una imagen de 5 megapíxeles guardada en calidad 0, sería más bloqueada que cualquier otra cosa. Al reducir el tamaño de la imagen a 640x480, el bloqueo se suavizó y apenas se notó ... hasta que lo guardé con calidad 0 nuevamente ...
En el otro extremo del espectro, si había una imagen que era de 800x600 con q = 0, cambiar el tamaño a 640x480 no va a cambiar el hecho de que parece una completa basura, por lo que guardar con q = 80 sería redundante.
¿Estoy cerca?
Estoy usando la biblioteca GD2 en PHP si eso es de alguna utilidad
Aquí hay una fórmula que he encontrado que funciona bien:
jpg100size (el tamaño no debe exceder en bytes para 98-100% de calidad) = ancho * alto / 1.7
jpgxsize = jpg100size * x (x = por ciento, por ejemplo, 0.65)
por lo tanto, puede usar estos para averiguar estadísticamente en qué calidad se guardó por última vez su jpg. si quiere bajarlo digamos un 65% de calidad y si quiere evitar el remuestreo, primero debe comparar el tamaño para asegurarse de que no sea demasiado bajo, y solo entonces reducir la calidad
Cada nuevo guardado del archivo disminuirá aún más la calidad general, al usar valores de mayor calidad conservará más de la imagen. Independientemente de la calidad de imagen original.
Como ya hay dos respuestas que usan identify
, aquí hay una que también muestra el nombre del archivo (para escanear múltiples archivos a la vez) :
Si desea tener una salida simple de filename: quality
de filename: quality
para usar en múltiples imágenes, puede usar
identify -format ''%f: %Q'' *
para mostrar el nombre de archivo + compresión de todos los archivos dentro del directorio actual.
El algoritmo de compresión Jpeg tiene algunos parámetros que influyen en la calidad de la imagen resultante.
Uno de esos parámetros son las tablas de cuantificación que define cuántos bits se usarán en cada coeficiente. Los diferentes programas utilizan diferentes tablas de cuarteo.
Algunos programas permiten al usuario establecer un nivel de calidad de 0-100. Pero no hay una defensa común de este número. La imagen hecha con Photoshop con una calidad del 60% toma 46 KB, mientras que la imagen hecha con GIMP toma solo 26 KB.
Las tablas de cuantificación también son diferentes.
Hay otros parámetros como el submuestreo, el método dct, etc.
Por lo tanto, no puede describirlos todos por un solo número de nivel de calidad y no puede comparar la calidad de las imágenes JPEG por un solo número. Pero puedes crear un número como photoshop o gimp que describa el compromiso entre el tamaño y la calidad.
Más información: http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html
La práctica común es cambiar el tamaño de la imagen al tamaño apropiado y aplicar jpeg después de eso. En este caso, las imágenes grandes y medianas tendrán el mismo tamaño y calidad.
Entonces, básicamente hay dos casos que te importan:
Si una imagen entrante tiene una calidad demasiado alta, puede ocupar una cantidad de espacio inapropiada. Por lo tanto, es posible que desee, por ejemplo, reducir las entradas q = 99 a q = 85.
Si una imagen entrante tiene una calidad demasiado baja, puede ser una pérdida de espacio aumentar su calidad. Excepto que una imagen que tiene una gran cantidad de datos descartados no ocupará mágicamente más espacio cuando la calidad se eleve, las imágenes en bloque se comprimirán muy bien incluso en entornos de alta calidad. Por lo tanto, en mi opinión, está perfectamente bien aumentar la entrada q = 1 a q = 85.
A partir de esto, creo que simplemente forzar una configuración de calidad decente es una cosa perfectamente aceptable.
Esta puede ser una pregunta tonta, pero ¿por qué le preocuparía microgestionar la calidad del documento? Creo que si usa ImageMagick para hacer la conversión, administrará la calidad del JPEG para obtener el mejor efecto. http://www.php.net/manual/en/intro.imagick.php
Para los visitantes futuros, que verifican la calidad de un jpeg determinado, puedes usar herramientas de imagemagick:
$> identify -format ''%Q'' filename.jpg
92%
Puede ver el nivel de compresión con ImageMagick. Las instrucciones de descarga e instalación se pueden encontrar en el sitio web oficial .
Después de instalarlo, ejecute el siguiente comando desde la línea de comando:
identify -format ''%Q'' yourimage.jpg
Y debe obtener el valor de 0 (baja calidad, tamaño de archivo pequeño) a 100 (alta calidad, tamaño de archivo grande).
Si vuelves a guardar un archivo JPEG usando el mismo software que lo creó originalmente, usando la misma configuración, encontrarás que el daño se minimiza: el algoritmo tenderá a arrojar la misma información que arrojó la primera vez. No creo que haya forma de saber qué nivel se seleccionó con solo mirar el archivo; incluso si pudiera, un software diferente casi garantiza parámetros diferentes y el redondeo, haciendo que una coincidencia sea casi imposible.