En esta oportunidad vamos a escribir sobre algo muy específico como es el formato en que los GPSs Garmin guardan sus imágenes (con extensión srf) y como transformarlos primeramente en un Png con la serie de vistas una al lado de otra, y luego, esas vistas convertirlas en un Gif animado.
Para hacer esto vamos a dividir el trabajo en varias partes:
- Convertir el archivo extensión srf en un png con un script hecho en Lenguaje C
- Extraer cada una de las porciones que conforman la imagen con Imagemagick
- Convertir todas esas porciones en un gif animado con Imagemagick
- Realizar este procedimiento de conversión para todos los vehiculos srf dentro de una carpeta con unas lineas de bash
Primer Paso – Convertir el archivo extensión srf en un png con un script hecho en Lenguaje C
Compilamos el código que se encuentra publicado en
este sitio y podemos descargarlo de
aquí , que nos permitirá convertir archivos SRF a PNG y viceversa.
gcc -O -ansi -Wall garmin2png.c -lpng -o garmin2png
gcc -O -ansi -Wall png2garmin.c -lpng -o png2garmin |
gcc -O -ansi -Wall garmin2png.c -lpng -o garmin2png
gcc -O -ansi -Wall png2garmin.c -lpng -o png2garmin
Para que compile, debemos tener instalado el gcc y las librerias libpng12-dev
Y se ejecuta de la siguiente manera:
./garmin2png file.srf file.png |
./garmin2png file.srf file.png
ó
./png2garmin file.png new_file.srf |
./png2garmin file.png new_file.srf
Si descargamos
este archivo de ejemplo, la salida será la siguiente:

Archivo HondaNewFit.png
Segundo Paso: Extraer cada una de las porciones que conforman la imagen con Imagemagick
convert /tmp/imagen.png -crop 80x80 /tmp/imagenRecortada.bmp |
convert /tmp/imagen.png -crop 80x80 /tmp/imagenRecortada.bmp
El parámetro crop indica que corte segmentos de 80×80 pixeles con la totalidad de la imágen, quedando en el directorio temporal una serie de archivos imagenRecortada-1.bmp, archivos imagenRecortada-2.bmp, archivos imagenRecortada-3.bmp, etc. Todas ellas de 80×80 con cada una de las vistas de la imagen anterior.
Tercer Paso: Convertir todas esas porciones en un gif animado con Imagemagick
convert -dispose background -delay 10 -loop 0 /tmp/imagenRecortada-%d.bmp[0-35] |
convert -dispose background -delay 10 -loop 0 /tmp/imagenRecortada-%d.bmp[0-35]
Con los parámetros -dispose background indicamos que en cada secuencia se borre la imagen anterior del gif animado, -delay 10 es el tiempo en milisegundos que esperara cada imagen, -loop 0 indica que el gif se repita infinitamente, y con %d y [0-35] que arme el gif con la serie imagenRecortada-0.bmp, imagenRecortada-1.bmp, imagenRecortada-2.bmp, imagenRecortada-3.bmp, hasta la imagenRecortada-35.bmp.
Cuarto Paso: Realizar este procedimiento de conversión para todos los vehiculos srf dentro de una carpeta con unas lineas de bash
Escribimos un archovo con los comandos anteriores a los que le pasaremos como parámetros el archivo srf y el nombre del gif animado el cual llamaremos garmin2gif.sh
#!/bin/bash
garmin2png "$1" /tmp/imagen.png
convert /tmp/imagen.png -crop 80x80 /tmp/imagenRecortada.bmp
convert -dispose background -delay 10 -loop 0 /tmp/imagenRecortada-%d.bmp[0-35] "$2" |
#!/bin/bash
garmin2png "$1" /tmp/imagen.png
convert /tmp/imagen.png -crop 80x80 /tmp/imagenRecortada.bmp
convert -dispose background -delay 10 -loop 0 /tmp/imagenRecortada-%d.bmp[0-35] "$2"
Le damos permiso de ejecución con chmod +x y lo ejecutamos de la siguiente manera:
ls *.srf | while read i; do garmin2gif.sh "$i".srf "$i".gif; done |
ls *.srf | while read i; do garmin2gif.sh "$i".srf "$i".gif; done
Con todo esto tenemos un script que transforma los vehículos de extensión srf en gif animados como el siguiente:
