Mostrando entradas con la etiqueta bash. Mostrar todas las entradas
Mostrando entradas con la etiqueta bash. Mostrar todas las entradas

lunes, 12 de diciembre de 2011

Redimensionando y rotando fotos desde la línea de comandos

Estamos renovando la pagina de la academia, y hay muchas fotos para publicar. El script tipo galeria donde se van mostrando mostrando las fotos ya está listo (utilizaron jquery y el easySlider).

Ahora solo falta homogenizar las fotos, que tengan el mismo tamaño y que no salgan giradas.

Para la orientación correcta podemos usar exiftran, esto si la camara almacenó la información de como se tomo la fotografía en los datos exif. En caso de no haberla almacenado, podemos utilizar algún software como eog para ver las fotos y girarlas de manera manual, al girarlas en este software, las fotos no se modifican, solo se modifica la etiqueta exif :)
exiftran -ai *
es la instrución que revisa todos los archivos de la carpeta, en este caso las fotos y si la orientación no es la adecuada las rota realmente y actualiza la etiqueta.

Como las fotos son de diferentes fuentes y diferentes cámaras, pues los tamaños varian mucho. Una vez rotadas las fotos necesitamos ajustar la altura de todas las fotos para que se vean continuas en el script. Para esto usaremos de imagemagick una utilidad que se llama mogrify.
mogrify -resize x400 *
esta instrucción fija la altura en todas fotos existentes en el directorio, y ahora si estan listas para ser usadas por el script.

La lista de fotos se genera en orden aleatorio, así que cada vez que visiten la página se vera diferente.

Como son muchas fotos, esta limitada a 25 por visita, así que si quieren ver más, refrequen la página :)

Otra situación con los archivos provenientes de diferentes camaras es que pueden repetirse los nombres de las fotos ya que todos están en la misma carpeta para que funcione el script. Así que para renombrarlos podemos utilizar el comando rename. En este caso tenemos carpetas que se llaman fotos01 hasta fotos09, y en lugar de buscar si hay nombres repetidos, modificamos los nombres de las fotos de todas las carpetas en una sola linea:


for a in $(seq 1 9); do cd fotos0$a ; rename "s//0$a/" *JPG; cd .. ; done




jueves, 28 de enero de 2010

Ejercicio en bash para descargar ...

Existen varias alternativas para descargar archivos de r*pidsh*re sin pagar por una cuenta, con la respectiva espera y todo ...

El que uso se llama autorapid.rb, y está escrito en ruby, es muy bueno.

La cuestión es que me dió curiosidad por comprar una cuenta para no tener que estar esperando por las descargas, blablabla ... y al intentar modificar este programa pues resulta que ... me resultó más fácil realizar otro que hiciera algo similar. MMM ya mencioné que el dicho programa funciona en modo texto ?? Eso es importante, ya que pretendo tener un Linux sin ambiente gráfico solo para descargas :)

Aunque existen "downloaders" que me permiten bajar del sitio en cuestión y de otros sitios, no encontré alguno en modo texto, así que urgando por ahí encontré que se puede utilizar el famoso **wget** para realizar estas descargas, y para no hacerlo a mano, pues tirando algunas lineas en bash (y aprovechando otros comandos) se puede automatizar algunas cosas al momento de descargar, por ejemplo:

* Verificar que todos los links estén disponibles antes de realizar la descarga.
* Interrumpir la descarga ... y tratar de continuar donde se quedó
* Hacer 4 descargas paralelas.

Para esto hacemos uso de lynx, wget y xargs, y a continuación les pego mi programa que llamé: bajarRapid.bash

nota: NECESITAS CUENTA PAGADA y haber creado la cookie.



##########################################################################################
#!/bin/bash
# Hugo Gonzalez, 2010
# hugo (dot) glez (AT) gmail (dot) com
# Programa para descargar de manera simultanea desde r*apidsh*are
# TENIENDO CUENTA PAGADA...



# archivo donde se verifican los links
file=".file.ok"

li=`cat $1`

###############
# Se verifican los links en paralelo :)
function chk_link
{
E=`lynx --dump $url | grep Error`
if [ "$E" = "Error" ]; then
echo "link roto ! : $url" >> $file
else
echo "OK : $url" >> $file
fi
}
################


if [ -f $file ]; then
echo "Ya se verificaron los links !"
else
# verificar links
echo "Validando links !"
for url in $li
do
chk_link $url &
done
wait # espera a que finalicen los procesos en segundo plano
E=`grep roto $file`
if [ "$E" == "" ]; then
echo "Todos los links OK"
else
echo "Existen algunos links rotos"
grep roto $file
exit 1
fi
fi


echo "Revisando archivos existentes !"

for a in $li
do
NA=`echo $a | cut -d'/' -f6`
if [ -f $NA ]; then
echo "$NA existe, omitiendo"
else
lin="$lin $a"
fi
done

echo "comenzando la descarga paralela de 4 archivos"


# para este paso debes haber creado previamente la cookie :)
echo $li| tr ' ' '\n' | xargs -P4 -I{} wget -c --load-cookies ~/.cookies/rapidshare {}