Hace tiempo me vi en la necesidad de buscar una aplicación en Linux que me permitiese comprimir las imágenes de forma masiva para un familiar. Por aquel entonces no encontré nada gráfico y después de preguntar por foros, concretamente en GNU/Linux de Meristation me ayudaron a realizar un script.
A día de hoy me resulta muy útil tanto a mi como a mi padre. La principal utilidad es comprimir las fotos realizadas con las cámaras digitales. Al no llevar procesadores potentes, por el tiempo de respuesta y el ahorro de batería la compresión que hacen de las imágenes es bastante pobre, si luego aplicamos en el ordenador una compresión del jpeg del 75%, por ejemplo, conseguiremos reducir el tamaño de la imagen a la mitad sin pérdida de calidad apreciable, o aplicando un 60% a la tercera parte en mi caso (depende de la cámara). Si hacéis muchas fotos os puedo asegurar que se nota y si las colgáis en internet ya ni os cuento.
Como comenté en el primer párrafo no encontré una aplicación gráfica que resolviese la papeleta como lo hacíamos antiguamente en Windows (que no quiere decir que no exista). Pero dada la flexibilidad de Linux, la potencia de la consola y sus herramientas es relativamente fácil salir del paso y además con el valor añadido y la satisfacción de hacerlo uno mismo.
ImageMagick es un conjunto de aplicaciones para crear, editar y componer imágenes. Concretamente usaremos convert, una herramienta de ImageMagick para manipular y convertir imágenes muy potente, concretamente la opción quality que especifica el nivel de compresión y en el segundo script además la opción resize para redimensionar la imagen.
Este primer script sirve para aplicar un nivel de compresión en tanto por ciento a las imágenes de un directorio:
########################################################################### # Copyright (C) 2007 by Resete-e # # resete arroba linuxlover punto org # # # # This program is free software; you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation; either version 2 of the License, or # # (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program; if not, write to the # # Free Software Foundation, Inc., # # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ########################################################################### #!/bin/bash # Configuración de los parametros de conversión PATRON='*.jpg *.png *.jpeg *.JPG *.JPEG *.PNG' QUA='60' DIR='compress/' TOTAL=0 OK=0 ERROR=0 # Comprobamos los parámetros if [ $# -lt 1 ]; then echo "Uso: $0 <directorio de imágenes>" exit 1 fi if [ $# -lt 2 ]; then QUA='60' else QUA=$2 fi # Accedemos al directorio con las imágenes cd "$1" [ $? -ne 0 ] && exit 1 # Creamos el directorio donde guardaremos las imágenes convertidas mkdir "$DIR" 2> /dev/null if [ $? -ne 0 ]; then echo -ne "Aviso: el directorio ya existe.\n" fi echo -e "\nTipo de imágenes: $PATRON" echo -e "Calidad: $QUA%" echo -e "Directorio de destino: \"`pwd`/$DIR\"\n" # Una a una convertimos las imágenes del directorio for imagen in $PATRON; do if [ -f "$imagen" ]; then let TOTAL=$((TOTAL+1)) echo -ne "\t$TOTAL - "$imagen" -> " convert -quality $QUA "$imagen" "$DIR/$imagen" 2>/dev/null if [ $? -eq 0 ]; then let OK=$((OK+1)) echo "OK" else let ERROR=$((ERROR+1)) echo "ERROR" fi fi done echo -e "\nTotal imágenes: $TOTAL" echo -e "\tCorrectas: $OK" echo -e "\tErrores: $ERROR"
Uso:
sh recompresion.sh path [value]
Donde path es el directorio donde se encuentran las imágenes a comprimir y value es el valor en porcentaje de compresión, si no se especifica toma por defecto 60% (se puede cambiar en el script). Las imágenes comprimidas las almacenará en un directorio llamado compress, hijo del que contiene las imágenes originales.
Este segundo script es una variación del anterior que admite además como opción el especificar un tamaño en píxeles para «redimensionar» las imágenes:
########################################################################### # Copyright (C) 2007 by Resete-e # # resete arroba linuxlover punto org # # # # This program is free software; you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation; either version 2 of the License, or # # (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program; if not, write to the # # Free Software Foundation, Inc., # # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ########################################################################### #!/bin/bash # Configuración de los parametros de conversión PATRON='*.jpg *.png *.jpeg *.JPG *.JPEG *.PNG' QUA='60' SIZE='0' DIR='compress/' TOTAL=0 OK=0 ERROR=0 # Comprobamos los parámetros if [ $# -lt 1 ]; then echo "Uso: $0 <directorio de imágenes>" exit 1 fi if [ $# -lt 2 ]; then SIZE='1280' else SIZE=$2 fi if [ $# -lt 3 ]; then QUA='60' else QUA=$3 fi # Accedemos al directorio con las imágenes cd "$1" [ $? -ne 0 ] && exit 1 # Creamos el directorio donde guardaremos las imágenes convertidas mkdir "$DIR" 2> /dev/null if [ $? -ne 0 ]; then echo -ne "Aviso: el directorio ya existe.\n" fi echo -e "\nTipo de imágenes: $PATRON" echo -e "Tamaño: $SIZE px" echo -e "Calidad: $QUA%" echo -e "Directorio de destino: \"`pwd`/$DIR\"\n" # Una a una convertimos las imágenes del directorio for imagen in $PATRON; do if [ -f "$imagen" ]; then let TOTAL=$((TOTAL+1)) echo -ne "\t$TOTAL - "$imagen" -> " convert -quality $QUA -resize $SIZE "$imagen" "$DIR/$imagen" 2>/dev/null if [ $? -eq 0 ]; then let OK=$((OK+1)) echo "OK" else let ERROR=$((ERROR+1)) echo "ERROR" fi fi done echo -e "\nTotal imágenes: $TOTAL" echo -e "\tCorrectas: $OK" echo -e "\tErrores: $ERROR"
Uso:
sh recompresion.sh path [value1] [value2]
En este caso value1 se corresponde con los píxeles en horizontal (mantiene la proporción) al redimensionar y value2 con el nivel de calidad de compresión de la imagen, ambos valores opcionales y en ausencia toman por defecto 1280px y 60% respectivamente (también fácilmente modificables en el script).
Estoy seguro que es muy mejorable y permite multitud de posibilidades, así que quien quiera perfeccionarlo, mejorarlo, ampliarlo le estaría muy agradecido si lo mostrase aquí.
Deja una respuesta