lunes, septiembre 11, 2006

Foto-Mosaicos con metapixel en Gentoo

Tengo en mi casa un poster de una foto de Yoda hecho con multiples fotos de la triologia original de la guerra de las galaxias y desde hace tanto tiempo como tengo el poster tenia ganas de hacer unas fotos de estas.... Me acuerdo cuando hace apenas unos años vi a un tipo por la tele (no recuerdo el nombre) que se japtaba de tener este software para desarrollar este tipo de posters... De las de aquella, para hacer un poster decente se tardaba un güevo y medio, pero hoy en dia tenemos varias soluciones libres para hacerlo y que con los micros de hoy en dia se tarda apenas unos segundos.

Ejemplo:


(hecho con solo 2700 fotos, a ver si subo una cuando tenga todas mis fotos en mi libreria)

Yo opte por metapixel

Para hacerlo funcionar solo necesitamos :

Descargarnos los ultimos fuentes de metapixel

Y tener una buena biblioteca de imagenes... (Cuantas mas mejor, 10.000 es un buen numero)

Descomprimimos, Compilamos he instalamos los fuentes de la ultima version de metapixel.

tar -xzf metapixel-version.tar.gz
cd metapixel-version
make
su
make install
exit


Ahora tenemos que recopilar muchas fotos, si las tenemos en un directorio del disco duro fenomenal, pero si teneis copias en dvds, tendreis que ir dvd a dvd generando una libreria con las fotos en pequeño para utilizarlas a posteriori. Imaginemos el primer caso. tenemos todas las fotos en /home/usuario/fotos , por otro lado crearemos un directorio donde almacenaremos las imagenes redimensionadas en /home/usuario/imagelib

mkdir /home/usuario/imagelib
metapixel-prepare -r /home/usuario/fotos /home/usuario/imagelib


Segun la cantadidad de las fotos que tengamos tardara mas o menos.
Si deseamos añadir mas fotos a la libreria bastara con cambiar el directorio /home/usuario/fotos por el nuevo, por ejemplo, unas que tengamos en un dvd

mount /dev/dvd /mnt/dvd
metapixel-prepare -r /mnt/dvd /home/usuario/imagelib


Esto te añadira las nuevas fotos.

No cometas el error de poner dos veces un directorio con las mismas fotos por que se te duplicaran en la libreria, es decir, no te valida si hay fotos que tienes...

Despues de añadir las fotos solo hace falta seleccionar una para la que quieras hacer un mosaico, por ejemplo /home/usuario/foto.jpg

metapixel --library /home/usuario/imagelib --metapixel /home/usuario/foto.jpg /home/usuario/foto-mosaico.png


En unos pocos segundos lo tendras hecho.

Es recomendable utilizar fotos grandes (dimensiones) para que el resultado sea decente, si por ejemplo tienes una foto de 120x120, lo que puedes hacer es redimensionarla a mayor tamaño con el gimp y despues convertirla en mosaico.

Si antes de --library le pones --collage te hara la foto a modo de collage poniendo unas encima de otras.

Por defecto al generar la libreria de imagenes te redimensiona las fotos a 128x128, normalmente las camaras no suelen hacer las fotos cuadradas, asi que, para que consigas un efecto de redimension sin deformacion deberias hacer la redimension a unos tamaños equivalentes, por ejemplo, para mi canon de 6 megapixels que saca las fotos en apaisado a 3456x2304 y pensando que queremos mantener la anchura de las imagenes de la libreria a 128, la altura correcta para fotos apaisadas seria de (2304 * 128) / 3456 = 85,34, asi que seria interesante añadir --width 128 --height 85 al metapixel-prepare. Hay que tener en cuenta que esto solo nos vale para fotos apaisadas, por lo que tendriamos que hacer una seleccion de las mismas, lo cual en 10.000 fotos puede ser un poquitin aburrido... ¿Convendria hacer algun script que mida dimensiones y haga la redimension consecuentemente?... a ver si se nos ocurre algo.

Hay mas parametros que pueden ser interesantes, pero a mi con estos por ahora me sobran.

Mas info sobre foto-mosaicos y otras herramientas en http://en.wikipedia.org/wiki/Photomosaic

Actualizacion masiva de awstats en Debian

Hace ya algunos meses que me instale el maravilloso awstats para asi controlar un poco el acceso que se hace a la mozleria ips, volumen de descarga, etc....

Cuando lo instale en mi servidorcete debian no vi la forma de actualizar las estadisticas de todos los logs, cogiendo incluso los que tengo almacenados asi que, despues de copiarme el fichero de configuracion de awstats y modificarlo a mi antojo hice este pequeño script para poder hacer estadisticas de todos los logs que tengo almacenados.

update-all-awstats.sh
#! /bin/bash

cd /var/log/apache
gunzip access.log.*

echo "" > access_temp_awstats.log

typeset -i i=0

# contamos los archivos que hay
for file in ls -lt access.log.*
do
    ((i=i+1))
done

typeset -i j=1

# creamos el bucle para que ejecute todo desde log.mayor hasta log.1
echo "Volcando antiguos logs a access_temp_awstats.log"
while test $j -le $i;
do
    echo "Volcando access.log.$i a access_temp_awstats.log"
    cat access.log.$i >> access_temp_awstats.log
    ((i=i-1))
done

echo "Borrando anteriores datos de awstats"
rm /usr/lib/cgi-bin/*.txt

echo "Ejecutando la actualizacion de los accesos desde el temporal"
perl /usr/lib/cgi-bin/awstats.pl -config=/etc/awstats/moz.servebeer.com.conf -LogFile=/var/log/apache/access_temp_awstats.log -update

echo "Borrando temporal"
rm access_temp_awstats.log

echo "Zipeando antiguos logs"
gzip access.log.*

echo "Terminado"
exit 0


Hecho esto, no hay mas que ponerlo como tarea del cron y listo.

cd /etc/crond.d/
cp awstats awstats-moz.servebeer.com
nano -w awstats-moz.servebeer.com
# cambiamos con la configuracion de nuestro awstats
crontab awstats


Si alguien tiene una solucion un poco mas elegante no tiene mas que postearla.

Salud3!