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
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

ó

./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
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]
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"

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

Con todo esto tenemos un script que transforma los vehículos de extensión srf en gif animados como el siguiente: