La suite ImageMagick ofrece identify entre sus aplicaciones la que nos permite ver información acerca de una imagen. En este caso lo usaremos para ver la calidad de un JPG y también usaremos convert de la misma suite (ImageMagick) para ajustar la calidad de la imagen.
En caso de que necesiten instalar ImageMagick, solo deben abrir un terminal y ejecutar como root en su Fedora Linux:
yum install ImageMagick
Recuerda que no estas obligado a usar el terminal en Fedora para instalar aplicaciones, también puedes hacerlo usando la interfaz gráfica, solo sigue mi vídeo tutorial Instalando programas en Fedora Linux
Una vez que tengas instalado ImageMagick puedes ejecutar el siguiente script:
#!/bin/bash
DIRECTORIOS="/var/www/htdocs/wordpress/wp-content/uploads/20*"
NUEVA_CALIDAD="80"
#
for IMAGENES in `find $DIRECTORIOS -type f| grep -i jpg$ `;
do CALIDAD=`identify -format %Q $IMAGENES`;
if [ "$CALIDAD" -gt "$NUEVA_CALIDAD" ];
then
echo mejorando $IMAGENES con calidad $CALIDAD
convert -quality $NUEVA_CALIDAD $IMAGENES $IMAGENES
fi
done
Como ven, en las primeras dos lineas se declara la ruta de donde están las imágenes y en el segundo se procesan. En mi caso me dispuse a ajustar la calidad de las imágenes de mi wordpress por lo que asignó a $DIRECTORIOS la ruta donde están guardadas las imágenes de los artículos. Noten que acepta wildcards.
El proceso como tal usa la salida de identify para saber la calidad actual de la imagen, luego con un condicional evaluamos si la imagen en cuestión tiene una calidad superior al valor deseado ($NUEVA_CALIDAD) y de ser así le se la cambiamos asignándole el valor de $NUEVA_CALIDAD que para este ejemplo es 80.
Eliminado meta-data y la codificación del JPEG para una imagen mas pequeña
Calidad al 100% con un tamaño o peso de 50K | Calidad al 80% con un tamaño o peso de 6.7K |
-quality 80 -strip -sampling-factor 4:1:1
Si quieres aplicar estos cambios a un lote de imágenes puedes usar esta versión modificada del script anterior:
#!/bin/bash
DIRECTORIOS="/var/www/htdocs/wordpress/wp-content/uploads/20*"
NUEVA_CALIDAD="80"
SAMPLING="4:1:1"
#
for IMAGENES in `find $DIRECTORIOS -type f| grep -i jpg$ `;
do CALIDAD=`identify -format %Q $IMAGENES`;
if [ "$CALIDAD" -gt "$NUEVA_CALIDAD" ];
then
echo mejorando $IMAGENES con calidad $CALIDAD
convert -quality $NUEVA_CALIDAD -strip -sampling-factor $SAMPLING $IMAGENES $IMAGENES
fi
done
Tengan en cuenta que jugar con el sampling-factor puede alterar la fidelidad de los colores de una imagen.
Fuente: http://orvtech.com/general/cambiar-calidad-imagenes-usando-bash/
3 comentarios:
Hola,
La condición de filtrado ("grep -i jpg$ ") yo la cambiaría por "grep -i .jpg$" para asegurarme de no modificar ficheros que terminen con jpg que no sean imágenes (i.e. tips_jpg).
Por otra parte no tengo claro que la herramienta es capaz de saltar ficheros con extensión jpg que realmente no lo sean. En dicho caso pondría algo del tipo:
file $IMAGENES | grep -i jpg >/dev/null 2>&1
[ $? -eq 0 ] && "ejecutamos código de cambio de calidad
Un saludo
Hola,
La condición de filtrado ("grep -i jpg$ ") yo la cambiaría por "grep -i .jpg$" para asegurarme de no modificar ficheros que terminen con jpg que no sean imágenes (i.e. tips_jpg).
Por otra parte no tengo claro que la herramienta es capaz de saltar ficheros con extensión jpg que realmente no lo sean. En dicho caso pondría algo del tipo:
file $IMAGENES | grep -i jpg >/dev/null 2>&1
[ $? -eq 0 ] && "ejecutamos código de cambio de calidad
Un saludo
Hola.
Gracias por comentar, perdon lo tarde que publique el comentario :)
saludos y buen aporte
Publicar un comentario