
Pues podréis llamarme anticuado, pero a mí me siguen gustando las herramientas que funcionan en línea de comandos. Yo prefiero considerarme un romántico…
ImageMagick es una aplicación que permite realizar casi cualquier operación con imágenes y, por supuesto, es gratuita. En la página oficial se puede encontrar todo lo necesario sobre lo que es capaz de hacer. Existen incluso libros específicos sobre su uso y buscando por la red se puede encontrar mucha, pero que mucha información, eso sí, casi toda en inglés. Solamente un aviso: cuidado que la mayor parte de los ejemplos que aparecen en la página son para el shell de Unix y muchos fallan en Windows.
Yo no voy pararme en enumerar todas sus posibilidades. Por mucho que las describiese, seguro que la mayoría de vosotros seguiría pensando que es inútil una aplicación que, aun con los tiempos que corren, funciona en línea de comandos. Voy a contar por qué la utilizo yo y para qué. Quizá alguien comparta conmigo esas necesidades y le resulte práctico este artículo. Empezaré por cuestiones generales:
- No he visto hasta ahora ninguna otra aplicación que sea capaz de trabajar con tantos formatos de imagen distintos. En la página anuncian cerca de 100 formatos distintos. La mayoría ni me suenan, pero nunca se sabe… Y uno de esos formatos es PDF, algo que trataré más adelante.
- Que funcione en línea de comandos implica que puedes llamarla desde un script o cualquier programa. Si necesitas tratar una foto desde tu página web realizada en PHP o hacer una aplicación que modifique imágenes de forma masiva, no hay nada mejor que un EXE de toda la vida, con sus parámetros y retorno de códigos de error. Además, Imagemagick dispone de APIs para utilizarla cómodamente desde C, Java, .NET, Pascal, Perl, PHP, Ruby, etc.
- El rendimiento que se logra es bestial. No tiene nada que ver con abrir complejos interfaces gráficos que consumen recursos de la máquina. el objetivo principal de Imagemagick es optimizar el proceso para que se pueda usar constantemente.
Ya más en concreto, yo utilizo Imagemagick en las siguientes situaciones:
- Por mi trabajo, a menudo necesito unificar el tamaño de muchas imágenes. Unificar a una determinada resolución para mí significa:
- Si la foto es mayor, reducirla de tamaño sin cambiar su aspecto, es decir, sin que se modifique su relación entre el alto y el ancho.
- Si sobra espacio por los laterales o en vertical, añadir una zona en color blanco (o el que sea).
- Y todo ello para que todas las fotos tengan exactamente las mismas dimensiones sin que se produzcan distorsiones.
Esto lo resuelvo muy rápido con el siguiente comando que ya tengo guardado en un .bat:
for %%i in (*.jpg) do convert %%i -resize 640×480 -size 640×480 xc:white +swap -gravity center -composite Procesadas\%%i
El for se encarga de recorrer todos los archivos jpg del directorio actual y el comando convert (uno de los ejecutables de Imagemagick) unifica a 640×480 píxels las imágenes, añadiendo fondo blanco (xc:white) donde sea necesario y manteniendo la foto original siempre en el centro (-gravity center). Las nuevas imágenes quedan almacenadas en una carpeta llamada Procesadas, que debe existir previamente.
No soy ningún experto en Photoshop, pero seguro que yo tardo menos en hacer esto que mucha gente.
- Imagemagick incluye un componente COM+ en forma de una DLL que se puede registrar y usar desde cualquier programa (ImageMagickObject.dll). Actualmente estoy haciendo una aplicación en Visual Basic 6.0 (sí, también soy un anticuado para esto), que necesita cambiar de formato imágenes de forma masiva. En vez de tener que comprar algún componente para esto, como las archiconocidas Leadtools, aprovecho Imagemagick y con el siguiente código lo arreglo:
Set img = CreateObject(“ImageMagickObject.MagickImage.1″)
img.Convert “-size”,”640×480″,”c:\temp\1.jpg”, “c:\temp\1.png”
Set img = Nothing
- Y termino con otra gran posibilidad bastante desconocida: Imagemagick permite trabajar con ficheros PDF como si fueran un conjunto de imágenes, una por página. ¿Para qué sirve? Pues, por ejemplo, puedes convertir un PDF en imágenes de cualquier formato muy rápido, algo que también necesito hacer actualmente en mi trabajo. En el siguiente ejemplo, convierto a jpg las primeras 10 páginas del PDF:
convert -quality 100 -define pdf:use-cropbox=true prueba.pdf[0-9] prueba.jpg
Cuidado: para que el tratamiendo de PDFs funcione correctamente, debes tener instalado también Ghostcript, otra de esas grandes utilidades que se merecen su lugar en mi corazón de programador.
Vale, vale, ya sé que soy un bicho raro. Solo espero que alguien me comprenda…
Impresionante apunte, gracias por la cantidad de enlaces que ayudan a utilizarlo y por los ejemplos de uso.
La verdad que es un apunte buenísimo el tuyo. Justo estoy diseñando un soft que debe unificar el tamaño de unas imágenes e incrusturlas en una base de datos, me viene bárbaro esto.
Saludos.
Realmente muy bueno y de gran utilidad tu aporte.
Gracias Luis.
Estoy escribiendo un segundo artículo con trucos que podemos utilizar en ImageMagick. Lo tendré disponible próximamente.
Gracias por la información. Es clara y directa. Y los enlaces a los programas funcionan!
Hola, estuve revisando tu articulo y te queria hacer una consulta.
Tengo una estación con Linux que tiene Instalado el Imagemagick, y como tengo que procesar demasidos archivos jpg.. preferi usar Imagemagick en modo de linea de comando.. El comando que aplico es el siguiente :
mogrify -units Undefined -quality 72 -orient top-left -sampling-factor 2×2 *.jpg
Pero al revisar los atributos de las imagenes modificadas solo veo que se ha modificado el atributo de quality nada mas..
Hay que considerar algo adicional para que se apliquen las otras opciones que estoy colocando como parametro.
Muchas gracias de antemano por la ayuda que me pueda prestar.
Atte
Jose Luis
Hola BichoRaro (es broma).
Yo te comprendo.
Yo tengo la necesidad de hacer una aplicacion en vb6 que redimensione un lote de imagenes y les añada una marca de agua. ¿Me podrias pasar algun ejemplo o decir como hacerlo?
Muchas gracias.
Saludos.
Miguel.
Hola Miguel
Este es un ejemplo en VB6 que hace justo lo que necesitas para una sola imagen. Hacerlo para muchas es muy sencillo, como ya sabrás…
Set img = CreateObject(“ImageMagickObject.MagickImage.1″)
‘ Cambiar tamaño a 200×200
img.Convert FicheroEntrada,”-resize 200×200″,FicheroSalida
‘ Añadir marca de agua del fichero FicheroMarcaAgua al 30% centrada abajo
img.Composite “-watermark 30%”,”-gravity south”,FicheroMarcaAgua,FicheroEntrada,FicheroSalida
Set img = Nothing
Para profundizar en las opciones, recomiendo este enlace:
http://www.imagemagick.org/Usage/
Pues a mi me encanta ImageMagick y no por eso me considero un bicho raro, los raros son los que no lo usan. Otro programa que es muy bueno y similar a ImageMagick, pero para PDF’s es pdftk, se los recomiendo.
Disculpa necesito ocupar imagemagick en Vb .net …. se puede ???.. si es asi como ??
gracias!!!!!!!!
buenas,con el api d image magick im4.java como podría codificar en java para pixelar una imagen en 7 colores a partir de una imagen cualquiera??
Saludos,
Muy bueno tu aporte, queria solicitarte una ayudita, quiero editar muuuchas imagenes usando imageMagick de ser posible, lo que necesito es que me convierta las imagenes (todo lo que este en un directorio) a escala de grises y blanco/negro, tienes que me facilites un ejemplo de ello???
Gracias y felicidades, buen post.
Podrías facilitarme los comandos para convertir de png a pdf por favor. u orientarme para hacer dicha conversión
saludos…
tengo una duda como sincronizo o manejo simultaneramente imageMagick con wxWidgets dento de un lenguaje de programacion??? como java o C++????
si alguien cabe como por favor ayudenme…
Hola, tengo exactamente la misma pregunta que Vali jajaja aun no entiendo muy bien que deberia bajar o como usarlo. Tengo que hacerle cualquier cosa a auna imagen previamente existente, de preferencia PMG que es el unico formato con el que se trabajar jejeje si pudieras ayudarme a a iniciarme un poco te lo agradeceria
mi correo es manuel.fac@hotmail.com