Script para optimizar imágenes en lote

23 de febrero de 2021

Requisitos

  • Bash
  • ImageMagick

Descargo de responsabilidad

Este script está desarrollado según unas necesidades personales particulares.

Si decides usarlo, será bajo tu propio riesgo. No me hago responsable de ninguna pérdida o deterioro de datos derivado del uso del script.

En caso de que decidas usarlo, realiza siempre una copia de seguridad de las imágenes antes de procesarlas con el script.

#!/bin/bash

# Se ejecuta en el directorio actual
# Reduce a 1920 la dimensión mayor de la imagen
# Respeta la relación de aspecto

set -euxo pipefail

function convertirjpeg () {
	if [ ! -d jpegAlternatives ];
	then
		mkdir jpegAlternatives
	fi

	# Convierte png a jpeg en la carpeta alternativa.
	convert $1 jpegAlternatives/$(identify -format "%t" $1).jpeg
}

# Comprueba instalación de ImageMagick
which magick > /dev/null 2>&1
if [ $? -ne 0 ];
then
	echo It requires ImageMagick package installed.
	exit 1
fi

# Comprueba el número de argumentos
if [[ $# > 2 ]]; then
	echo Demasiados argumentos
	exit 2
fi

case $# in
	1)
		directory=$1
		max_dimension=1920
		;;
	2)
		directory=$1
		max_dimension=$2
		;;
	*)
		directory=pwd
		max_dimension=1920
		;;
esac

cd $directory

# Crea un directorio para las imágenes optimizadas

if [ ! -d "optimizedImages" ]; 
then
	mkdir optimizedImages
fi

for i in $(ls);
do 
	mime1=$(mimetype $i | awk '{print $2}' | awk -F"/" '{print $1}')
	mime2=$(mimetype $i | awk -F"/" '{print $2}')
	if [ "$mime1" == "image" ]; 
	then
		w=$(identify -format "%w" $i);
		h=$(identify -format "%h" $i);
		if [ "$w" -gt "$max_dimension" ] || [ "$h" -gt "$max_dimension" ]; 
		then

			convert $i -resize ${max_dimension}x${max_dimension} $i

		fi
		
		case "$mime2" in
			"png")
				t=$(file $i | awk '{print $9}')
				if [ "$t" == "RGB," ];
				then
					echo $?
					# No tiene transparencia
					convertirjpeg $i
				fi
				optipng -nc -nb -o7 -full -out optimizedImages/$i $i
				;;
			"jpeg")
				jpegoptim --max=80 --all-progressive --strip-all --strip-exif --preserve --totals --dest=optimizedImages $i
				;;
		esac
	fi
done
Lenguaje del código: Bash (bash)

https://github.com/casoblus/bash_scripts/tree/master/optimizeImages

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.