#!/bin/bash # Para instalarlo en el nautilus, añadirlo con nautilus-util y parametro %M # Usa los paquetes imagemagick y zenity # Redimensiona las imagenes de los parametros y añade una imagen $WM con cierto $BLEND a modo de watermark # Las imágenes originales no se modifican :) # www.danikaze.com # v1.2: 13 de Mayo de 2009 # + añade automaticamente la lente usada a las keywords para que postr las coja como tags # v1.1: 21 de Diciembre de 2008 # + distingue imagenes altas de anchas para la imagen superpuesta # + permite desplazamiento al superponer imagenes # + elimina el tag CreatorTool # v1.0: 10 de Diciembre de 2008 ############################################################################################################## # Parámetros de configuración ############################################################################################################## # archivos a procesar (expresion regular no case-sensitive entre comillas simples) ARCHIVOS='.*jpg' # tamaño maximo de las fotos (conserva las proporciones) ANCHO=1280 ALTO=1280 # carpeta donde guardar los resultados # Si es una ruta relativa (no empieza por /), la carpeta de DESTINO se creara dentro de donde esté cada imagen # (p.e. si la imagen esta en /ruta/a/la/imagen.jpg el resultado estara en /ruta/a/la/DESTINO/imagen.jpg) # Si es una ruta absoluta (empieza por /), todas las imagenes se guardaran en DESTINO independientemente de su origen # (con lo que pueden sobreescribirse imágenes si tienen los mismos nombres) DESTINO="/home/danikaze/flickr" # nivel de transparencia de la imagen de watermark BLEND="50" # imagen de watermark o marco para imagenes mas anchas que altas, y al reves WMH="/home/danikaze/bin/danikazeCircH.png" # horizontal WMV="/home/danikaze/bin/danikazeCircV.png" # vertical # desplazamientos X e Y del watermark sobre la imagen, o de la imagen sobre el marco (ancho y alto del marco) OFFSETX="+0" OFFSETY="+0" # calidad de compresion JPG CALIDAD=98 # limite de imagenes para mostrar un aviso (por si hemos cogido una carpeta incorrecta o con subcarpetas) LIMITE=100 # cierra la ventana de progreso al finalizar automaticamente AUTOCERRAR=0 # quita el tag EXIF del CreatorTool QUITACREATORTOOL=1 # añade la lente como keyword ADDLENS=1 ############################################################################################################## # NO TOCAR A PARTIR DE AQUI ############################################################################################################## ARCHIVOTEMPORAL=".templist" TITULO="Convertir imágenes by danikaze" function procesaimagen { # si es una ruta relativa if [[ `echo "$DESTINO" | grep "^/" | wc -l` == 0 ]]; then BASE=`dirname "$1"` DEST="$BASE/$DESTINO" # si es absoluta else DEST=$DESTINO fi # si no existe el dir de salida, lo creamos if [[ ! -d "$DEST" ]]; then mkdir -p "$DEST" fi DEST=$DEST/`basename "$1"` W=`identify -format "%[fx:w]" "$1"` H=`identify -format "%[fx:h]" "$1"` ORIGEN="$1" CAMBIOS=0 # si es mayor de las medidas que queremos la redimensiona, si no no hace nada if [[ $ANCHO -lt $W || $ALTO -lt $H ]]; then convert "$ORIGEN" -quality $CALIDAD -resize ${ANCHO}x${ALTO} "$DEST" ORIGEN="$DEST" CAMBIOS=1 fi # se usa una imagen para las imagenes en vertical if [[ $W -lt $H ]]; then WM="$WMV"; # y otra distintas para las horizontales else WM="$WMH"; fi # y le añade la marca de agua o marco, si existe if [[ -s "$WM" ]]; then # se cogen las dimensiones de WM WMANCHO=`identify -format "%[fx:w]" "$WM"` WMALTO=`identify -format "%[fx:h]" "$WM"` composite -quality $CALIDAD -blend "$BLEND" -geometry ${WMANCHO}x${WMALTO}${OFFSETX}${OFFSETY} "$WM" "$ORIGEN" "$DEST" CAMBIOS=1 fi # si no se ha hecho ningún cambio, simplemente copiamos la imagen if [[ $CAMBIOS == 0 ]]; then cp "$ORIGEN" "$DEST" fi # se quita el tag EXIF de CreatorTool if [[ $QUITACREATORTOOL == 1 ]]; then exiftool -CreatorTool= -overwrite_original "$DEST" fi # añade la lente usada como keyword en los datos EXIF if [[ $ADDLENS == 1 ]]; then # lee que lente se ha usado LENTE=`exiftool -lens "$DEST" | cut -d":" -f2`; # trimeamos la variable read LENTE <<< "$LENTE"; # se añade como informacion en las keywords exiftool -keywords="$LENTE" -overwrite_original "$DEST" fi } # comprueba que se tengan las dependencias function comprobarDependencias { HAY=`whereis "$1" | cut -d":" -f 2 | wc -c` if [[(($HAY < 2))]]; then zenity --error --title="Error" --text="Se requiere el comando '"$1"'" exit fi } function procesado { # numero de archivos procesados N=1 echo 0 % while (( $N <= $TOTAL )); do # para cada archivo F=`head -n $N "$ARCHIVOTEMPORAL" | tail -n 1` PORCENTAJE=$(($(($N * 100)) / $TOTAL)) echo "#Convirtiendo "`basename "$F"`" ($N de $TOTAL)" # solo se procesan los archivos, no los directorios if [[ -f "$F" ]]; then procesaimagen "$F" echo $PORCENTAJE else echo "no valido" fi N=$(($N + 1)) done; if [[ $TOTAL > 1 ]]; then echo "#Terminado!\n$TOTAL archivos convertidos :)" else echo "#Terminado!\n$TOTAL archivo convertido :)" fi } ############################################################################################################## comprobarDependencias convert composite identify exiftool zenity if [[(($# < 1))]]; then echo "Debes pasar algun archivo" exit; fi ############################################################################################################## # si la imagen de watermark no existe, lo avisamos if [[(( ! -f "$WMH" ))]]; then `zenity --question --title="Convertir para imágenes" --text="No se encuentra la imagen de watermark horizontal:\n$WMH\n¿Continuar? (no se aplicará ningún watermark)"` if [[ $? == 1 ]]; then exit fi fi if [[(( ! -f "$WMV" ))]]; then `zenity --question --title="Convertir para imágenes" --text="No se encuentra la imagen de watermark vertical:\n$WMV\n¿Continuar? (no se aplicará ningún watermark)"` if [[ $? == 1 ]]; then exit fi fi # si el archivo temporal existia, lo borramos if [[ -f "$ARCHIVOTEMPORAL" ]]; then rm "$ARCHIVOTEMPORAL" fi # para cada archivo pasado for F in "$@"; do # metemos los archivos que concuerden para ser procesados en la lista temporal find "$F" -iregex "$ARCHIVOS" >> "$ARCHIVOTEMPORAL" done; TOTAL=`wc -l "$ARCHIVOTEMPORAL" | cut -d" " -f1` # si pasa el limite, mostramos un aviso por si queremos continuar o no if [ $TOTAL -gt $LIMITE ]; then `zenity --question --title="$TITULO" --text="Hay mas de $LIMITE archivos para procesar ($TOTAL en total).\n\n¿Desea continuar?"` if [[ $? == 1 ]]; then exit fi fi # inicia el procesado, sacando info con zenity if [[(( $TOTAL > 0 ))]]; then if [[ $AUTOCERRAR == 1 ]]; then procesado | zenity --progress --title="$TITULO" --auto-close else procesado | zenity --progress --title="$TITULO" fi fi # se borra el archivo temporal que se creo para guardar el listado de imagenes a procesar rm $ARCHIVOTEMPORAL