Puede que algunos de vosotros conozcáis ImageMagick, una aplicación de software libre que sirve para crear, editar y componer imágenes. Además es capaz de leer, convertir y guardar imágenes en una gran variedad de formatos.

Pero además de el propio software en sí, existe un conjunto de librerías que nos permite aprovechar las funcionalidades de ImageMagick en nuestras propias aplicaciones. Hay librerías para los lenguajes de programación C, Ch, C++, Java, Lisp, Pascal, Perl, PHP, Python, Ruby y Tcl/Tk, aunque en este post me centraté en la versión para C++: Magick++.

Lo primero que deberemos hacer es descargarnos la librería desde la página web de ImageMagick. Yo he descargado la versión 6.5.1-9, sobre la que se basará el tutorial. La podéis descagar directamente desde aquí. A continuación os detallaré los pasos para instalar la librería en un entorno UNIX.

En primer lugar deberemos descomprimir el archivo. En mi caso he descargado un ZIP, por lo que podemos descomprimirlo mediante la interfaz gráfica o por terminal con:

unzip ImageMagick-6.5.1-9.zip

Una vez descomprimido accedemos al directorio adecuado y podemos observar los archivos de código fuente. Utilizaremos los tres comando básicos para compilar e instalar una librería en UNIX.

cd ImageMagick-6.5.1-9
./configure
make
sudo make install

Si todo ha ido bien, ya deberíamos tener la librería instalada y operativa para usarla en nuestro programa. ¡Vamos manos a la obra!

Para empezar, vamos a descargarnos una imagen sobre la que poder hacer nuestro primer ejemplo. ¿Se os ocurre qué imagen podemos escoger? ¡Sí amigos, Lenna! La podéis obtener de mi anterior post, en esta URL.

Ahora vamos ha realizar un pequeño programa que nos lea la imagen, nos la recorte y nos la guarde con un nombre distinto. El código es el siguiente:

#include <Magick++.h>
#include <iostream>

using namespace std;
using namespace Magick;

int main(int argc, char *argv[]) {

Image myPhoto;

try {
// Leemos la imagen "lenna-300x300.png"
myPhoto.read("lenna-300x300.png");

// Recortamos la imagen manteniendo los 150x150 píxeles
// superiores de la imagen especificando el tamaño
// en el formato (width, height, xOffset, yOffset)
myPhoto.crop( Geometry(150,150, 0, 0) );

// Guardamos la nueva imagen recortada
myPhoto.write("lenna-recortada.png");
} catch( Exception &error_ ) {
cout << 'Ha ocurrido un error: ' << error_.what() << endl;
return 1;
}
return 0;
}

Para compilarlo y ejecutarlo, navegaremos por el terminal hasta el directorio en el que tenemos el código C++ y la imagen descargada, y teclearemos el comando:

g++ ejemplo.cc -o ejemplo -l Magick++ && ./ejemplo

Dónde ejemplo.cc es el nombre del archivo con el código en C++. Utilizamos el compilador g++, que es la versión del archiconocido GCC para el lenguaje orientado a objetos. Con la opción -l Magick++ le indicamos que debe compilar/linkar la libreria Magick++.

El resultado es el siguiente:

lenna-recortada

Como podéis ver hemos conseguido recortar la imagen desde nuestro pequeño programa en C++. La librería nos permite muchísimas más opciones (hacer zoom, colorear, añadir ruido, y un larguísimo etc.) que podéis consultar en la documentación oficial. ¡Ahora ya sabéis como tratar imágenes desde vuestros programas! Si tenéis dudas utilizad los comentarios.

Fuentes:

Magick++ – http://www.imagemagick.org/Magick++/

Wikipedia – http://es.wikipedia.org/wiki/ImageMagick