Planeo escribir un script que escanee más de 100,000 imágenes JPEG y las vuelva a comprimir si son "demasiado grandes" en términos de tamaño de archivo. La secuencia de comandos es la parte fácil, pero no estoy seguro de cómo clasificar una imagen como "demasiado grande".
Por ejemplo, hay una imagen de 2400x600px con un tamaño de archivo de 1.81MB. El comando Guardar para web de Photoshop crea un archivo de 540 KB con una calidad de 60 y las mismas dimensiones. Esto es aproximadamente el 29% del tamaño original.
Ahora estoy pensando en usar estos números como guía. Algo así como 540 KB / (2,400 * 600 / 1,000,000) = 375 KB por megapíxel. Cualquier imagen más grande que esta se considera grande. ¿Es este el enfoque correcto o hay uno mejor?
Edición 1: las imágenes deben optimizarse para su visualización en sitios web.
Edición 2: puedo determinar la calidad de salida deseada experimentando, necesito saber si las imágenes son grandes en términos de tamaño de archivo y dimensiones y deben guardarse en una calidad inferior.
fuente
Respuestas:
En promedio , el punto óptimo de JPEG es de alrededor de un bit por píxel .
Por supuesto, esto variará según el contenido de la imagen, porque ciertos tipos de gráficos (por ejemplo, áreas planas y gradientes suaves) se comprimen mejor que otros (ruido, texto), por lo que no es un método robusto para aplicar a ciegas a cada imagen.
También tiene el problema de no tener una imagen de referencia sin comprimir para comparar, por lo que realmente no sabe con certeza cuál es la calidad actual de las imágenes que tiene y cuánto más puede reducir la calidad para que aún sea aceptable. La calidad se puede adivinar en cierta medida de las tablas de cuantificación en JPEG, pero tampoco es un método confiable (específicamente, el criterio de calidad de ImageMagick es muy incorrecto para JPEG con tablas de cuantización personalizadas y optimizadas).
Dicho esto, hay un enfoque práctico razonable:
Es importante no elegir simplemente el tamaño de archivo más pequeño, y en su lugar requiere una caída significativa en el tamaño del archivo. Esto se debe a que la recompresión de JPEG tiende a disminuir siempre el tamaño del archivo levemente debido a la pérdida de detalles causada por la naturaleza de pérdida de JPEG y la conversión a RGB de 8 bits, por lo que pequeñas caídas en el tamaño del archivo pueden tener una caída desproporcionadamente grande en la calidad que no vale la pena. eso.
fuente
El tamaño de los archivos comprimidos con JPEG varía según la complejidad de la imagen. Probar el control de los tamaños de archivo de la manera que usted describe dará como resultado una calidad de imagen percibida muy variable.
Considere las siguientes opciones en su lugar:
El enfoque lo suficientemente bueno. Use una configuración de calidad que considere aceptable, como 75. Compare el tamaño del resultado con la imagen original y mantenga el archivo más pequeño. ¿ Ver qué calidad elegir al convertir a JPG?
Use un minimizador de JPEG , como JPEGmini o
jpeg-recompress
de jpeg-archive . Básicamente están diseñados para hacer lo que parece que estás tratando de hacer, pero con más conocimiento de los aspectos internos del algoritmo JPEG.Genere miniaturas de varios tamaños , como sugiere Nathancahill , desde la perspectiva del desarrollador web.
fuente
No. Este es un enfoque equivocado.
El tamaño del archivo en píxeles, sí, tiene algo que ver con el peso final, pero no es el único factor.
Haz un examen. Tome un archivo completamente blanco del mismo 2400x600px y guárdelo como JPG.
Ahora tome una foto de un bosque (mismo 2400x600px) con muchos detalles y guárdelo. Este archivo será más grande con la misma configuración de compresión.
El tamaño final depende de estos 3 factores:
Por lo tanto, no puede ni debe definir el peso en función del tamaño de píxel.
Pero entiendo tu problema.
Sin analizar la compresión actual de la imagen, es difícil definir el peso "óptimo" (que es relativo al observador o al uso de las imágenes)
Probablemente pueda definir una configuración de compresión y volver a comprimir "todos". No sé si quieres hacer eso antes de "subir", lo que probablemente te ahorrará más tiempo que el guardado omitiendo algunos de ellos.
Existen algunas herramientas que analizan una imagen y calculan la relación de compresión actual. Pero dudo que sea tan importante.
fuente
jpeg size / raw size
yraw size = pixel size * number of pixel
,pixel size
siendo 3 octetos para un espacio de color RGB de 24 bits. Y como usted mismo dice, esta métrica no es suficiente para determinar si una imagen está suficientemente comprimida.Desarrollador web aquí. Así es como abordaría esto:
1. Determine las dimensiones de la imagen mostrada y las resoluciones de pantalla requeridas.
Su primera tarea es determinar en qué tamaño de píxel se mostrarán las imágenes. ¿Son fotos de productos en una tienda en línea? ¿Una galería de fotos? ¿Fotos de perfil de usuario? Múltiples tamaños diferentes? Haga una lista de las dimensiones en píxeles que necesitará. Compruebe si necesitará imágenes @ 2x para pantallas de alta resolución, como teléfonos y tabletas recientes.
2. Use un script en miniatura para crear nuevos archivos de imagen.
Estos se llaman scripts en miniatura, pero se pueden usar para mucho más que solo miniaturas. Hay muchos guiones por ahí o puedes escribir el tuyo. Al no cambiar el tamaño de los archivos originales, puede hacerlo si comete un error en su secuencia de comandos o se da cuenta en el futuro de que necesita una imagen de mayor resolución. Una práctica común es especificar un sufijo en el nombre del archivo de salida. Por ejemplo:
3. Comprimir.
El script en miniatura debe especificar la compresión jpg cuando corta los nuevos archivos de imagen. Sin embargo, existen otros minificadores que podrían reducir aún más el tamaño del archivo.
fuente
Si bien la respuesta de @ Rafael ha explicado las entradas y salidas de compresión JPEG, intentaré responder a su web y cargar problemas.
Usar una imagen en un sitio web (para diseño o contenido) dictará algunos imperativos: ¿para qué se usará mi imagen? Logotipo, foto de portada, miniatura, foto en una publicación de blog, foto de pantalla completa para una galería ... Además, si la usa para múltiples propósitos (por ejemplo, una foto y la miniatura de su galería), debe rechazarla en todos los tamaños requeridos. Sin embargo, a menos que esté creando su propio sitio web, la mayoría de los servicios web actuales generarán imágenes de menor tamaño a partir de su imagen más grande para usar en el sitio.
Ahora que conoce el propósito de su imagen, el sitio web (o CMS o Framework front-end) siempre requerirá un tamaño máximo en píxeles para que su imagen cumpla. Los logotipos pueden ser 600x600px máx., La cubierta de fondo puede ser 1280x720px máx., La foto de contenido para pantalla completa 1920x1080 o la resolución nativa de la cámara para la conservación de detalles absolutos. Verifique el tamaño correcto del sitio web al que desea subir. Desea igualar al menos el tamaño de píxel máximo requerido, dependiendo de la proporción que desea lograr. Tenga cuidado, algunos servicios recortarán y estirarán su imagen si la relación de aspecto no es la misma. En ese caso, tendrá que volver a recortar su imagen para que se ajuste al tamaño y la relación máximos requeridos.
Luego, el sitio web puede imponer un límite de tamaño de archivo (o no, dependiendo del propósito de la imagen). En cuanto al tiempo de carga de la página, cuanto más ligero, mejor. En su ejemplo de una imagen de alta resolución a 2400x600px, 300 a 500kB es un tamaño totalmente fino para el tiempo de carga. Las imágenes de contenido (como fotos) pueden ser más pesadas si el propósito de la imagen lo requiere (por ejemplo, pantalla completa), hasta la resolución nativa de su cámara si es necesario. Si no se proporciona ninguna indicación, el límite de tamaño del archivo puede ser difícil de adivinar, ya que puede depender del equipo de la audiencia (móvil, computadora de escritorio ...), la calidad de la red del país de la audiencia ... Para obtener la máxima calidad y servicio, trate la foto una por una para obtener el tamaño mínimo de archivo sin artefactos visibles. Para mayor comodidad o velocidad de procesamiento, cambie el tamaño del script utilizando un nivel de compresión satisfactorio general (alrededor de 70 debería estar bien).La respuesta de @xiota también podría ser la herramienta que necesita. Establezca su propio estándar aquí.
TL; DR el propósito de la imagen en el sitio web es clave para la cantidad de cambio de tamaño / compresión.
fuente
Lo que está calculando es el tamaño comprimido promedio de un píxel de imagen, si lo divide por el tamaño de píxel sin procesar (generalmente 3 octetos para un RGB de 24 bits), obtiene la relación de compresión.
Esta es una buena métrica que le brinda información sobre el estado de compresión de la imagen, pero no es suficiente para juzgar si la imagen está suficientemente comprimida o no porque la relación de compresión no depende solo del perfil de compresión (algoritmo = JPEG, calidad = 60/100) pero también en el potencial de compresión de la imagen: diferentes imágenes con el mismo tamaño sin procesar y el mismo perfil de compresión producirán diferentes tamaños de JPEG porque las imágenes son más o menos fáciles de comprimir (una imagen en blanco es muy fácil de comprimir, blanco el ruido no es).
Debido a esto y porque el perfil de calidad "utilizado por última vez" no se almacena en esta imagen (ni en la estructura de metadatos o encabezado jpeg), el enfoque más utilizado al volver a publicar imágenes con un perfil de tamaño / calidad objetivo es en realidad volver a comprimir (y potencialmente redimensionar) todo (automáticamente) independientemente del estado inicial de la imagen.
Sí, puede volver a comprimir cuando no sea necesario, sí, incluso puede perder espacio si vuelve a comprimir con un perfil de mayor calidad, pero esos son casos extremos y, en gran escala, es lo más fácil de hacer para garantizar un perfil de calidad objetivo. Por supuesto, solo desea hacer eso una vez para no degradar gradualmente las imágenes, y probablemente debería almacenar dos bibliotecas de imágenes: la inicial "intacta" y la "para ser publicado / recomprimido".
Existen muchas herramientas para volver a comprimir un montón de archivos, también puede crear su propio script y usar la pila técnica correcta (C ++ y libjpeg en su mayoría) puede ser bastante rápido incluso para archivos> 100k.
Si desea implementar un proceso más inteligente / complejo, puede intentar experimentar con una lógica iterativa de compresión / comparación de tamaños para estimar el perfil de calidad original (volver a comprimir con la misma calidad debería producir aproximadamente el mismo tamaño, con un alto la calidad debería aumentar ligeramente el tamaño y con una calidad inferior debería disminuir significativamente el tamaño). Esto, por supuesto, consumiría mucha más potencia de CPU.
fuente
El tamaño original sin comprimir es 2400 x 600 x 3 = 4,320,000 bytes (4.1 MB), porque el color de 24 bits es siempre tres bytes de datos RGB por píxel . No hay forma de evitar esta verdad absoluta.
Sin embargo, el tamaño de JPG también depende del detalle de la imagen. Las áreas grandes y lisas (como el cielo o las paredes pintadas) se comprimen mejor, pero las áreas de mayor detalle (como un árbol lleno de hojas) no se comprimen también. Entonces no hay un indicador numérico absoluto.
Pero 540 KB es 0.540 / 4.1 = 13% del tamaño original de 4.1 MB . Puede ser el 29% del tamaño JPG anterior, pero es el 13% del tamaño original sin comprimir. Eso es 1/8 del tamaño original sin comprimir, que generalmente se considera calidad "decente". No es óptimo, no tiene la máxima calidad, pero en general es decente, tal vez lo suficientemente bueno para algunos usos. Solo digo que ya es pequeño.
Un archivo JPG más grande es mejor calidad de imagen, y más pequeño es menos calidad de imagen. Debe decidir qué es lo suficientemente bueno, pero JPG nunca es "demasiado grande", ya que la calidad de la imagen disminuye con la compresión JPG. El color de 24 bits tiene tres bytes por píxel sin comprimir.
Entonces la decisión es si lo quieres pequeño o si lo quieres bien.
Pero hacer que un JPG existente sea más grande es aún peor, ya que se agregan más artefactos JPG y, una vez pequeños, los datos cambian y nunca mejorarán.
Los artefactos JPG generalmente muestran dos formas, como bloques visibles de 8x8 píxeles de un color en las áreas lisas sin detalles, o como bordes ásperos visibles alrededor de los bordes de detalles.
Si edita y vuelve a guardar un JPG, se agregan artefactos JPG adicionales. Si es necesario, es una buena práctica volver a guardar siempre para que coincida con la configuración de compresión original.
fuente
El "Guardar para Web" de Photoshop es en realidad un compromiso bastante bueno entre el tamaño y la calidad del archivo, por lo que, a menos que tenga requisitos más específicos, debe ir con eso. Un consejo típico para los desarrolladores web es mantener un rango de calidad del 50-70%. Por supuesto, hay excepciones: querrá un 90-95% de calidad en el logotipo de una empresa que debe verse bien en todo momento (o incluso convertirlo a un formato sin pérdidas), y llegar hasta un 30% en un tamaño grande pero apenas Fondo de página visible.
Tampoco olvides reescalar tus imágenes. Una imagen de 2400x600 se verá genial en una pantalla 4K, pero se redimensionará en pantallas más pequeñas, desperdiciando el ancho de banda de datos sin ninguna mejora visual para el usuario. Consulte la plantilla del sitio web que utilizará para averiguar el ancho óptimo para las imágenes. Por lo general, en el momento de escribir esto será de alrededor de 1200-1300 píxeles (vea la resolución más popular aquí ).
Recuerde conservar los originales de las imágenes que convierta a calidad web. Si alguna vez necesita volver a trabajar o imprimir este material, lamentará tenerlo solo en un 60% de calidad y una resolución de 1 Mpix.
fuente