miércoles, 16 de julio de 2008

Debido al exito del PDF2Imagen, aplicación para convertir archivos PDF en imagenes. Un lector me pidio el código fuente así que le di una acomodada para que se vea presentable y lo publico hoy. Si, lo se, esta es una entrada "de nicho" para un tipo de lector muy especifico pero no se preocupen que hay Gnoblis para casi todos por lo regular.

Ejecutable
Código fuente

Para quienes no hallan visto o no recuerden la entrada original donde publique información sobre mi programa para convertir en imagenes las páginas de un archivo PDF y las motivaciones que me llevaron a hacerlo, que basicamente era automatizar una tarea tediosa y de gran volumen que implicaba obtener un monton de PDF casi iguales, convertir las páginas a imagenes, recortarles unos pedazos a las paginas que interesaban y formar una imagen nueva con esos pedazos en diferentes grados de calidad y contraste para obtener el resultado requerido... una y otra vez hasta la locura y el final de los tiempos, así que mejor hice una aplicación automatica especifica para eso y que corre en background... y mientras investigaba realice esta que es más general y me permitio experimentar para generarla.


PDF2Imagen


Así se ve la aplicación actualmente.


La aplicación esta programada en C#, utiliza al objeto COM de ImageMagick para realizar las conversiones, que a su vez se apoya en GhostScript para tener compatibilidad con los PDF. Visualmente es muy sencillo como veran pues en realidad uso muy pocos parametros, y por dentro el código tampoco es completo pues practicamente solo es una interfaz grafica para ImageMagick.


Adicionalmente publico al ejecutable y el código fuente que les doy también quiero mencionar un par de funciones que me fueron utiles para mi proposito especifico pero en esta aplicación de conversión general no las he implementado, pero igual les doy las sintaxis de ello.


Para recortar segmentos de imagen hay que usar en la función convert (crea imagenes nuevas) o mogrify(sobreescribe la imagen original) de ImageMagick el parametro -crop seguido de una idicación denominada geometria, la cual consiste en indicar el tamaño del área a recortar y el punto donde comienza el recorte. Por ejemplo 800x600+10+20 significa recorta un recuadro de 800 pixeles de ancho por 600 pixeles de alto a partir del pixel 10 de izquierda a derecha y el pixel 20 de arriba a abajo de la imagen original. La instrucción se veria algo así:

ImageMagickObject.MagickImageClass imagen = new MagickImageClass();
object[] parametros = new object[4];
parametros[0] = "-crop";
parametros[1] = "800x600+10+20";
parametros[2] = "\imagen_original_a_la_que_le_voy_a_cortar.jpg";
parametros[3] = "\imagen_nueva_que_es_solo_la_parte_que_recorte.bmp";
imagen.Convert(ref parametros);

Aunque también se puede usar combinada con la instrucción mogrify en lugar de convert para sobreescribir la imagen original en lugar de crear una nueva con el reporte, de la siguiente manera:

ImageMagickObject.MagickImageClass imagen = new MagickImageClass();
object[] parametros = new object[3];
parametros[0] = "-crop";
parametros[1] = "800x600+10+20";
parametros[2] = "\imagen_a_la_que_le_voy_a_cortar_y_sobreescribir.tif";
imagen.Mogrify(ref parametros);

En caso contrario a crop, para colocar una imagen sobre otra se usa Composite, esta instrucción coloca una imagen sobre otra y guarda la imagen que se genera. También hace uso de una variante del parametro de geometria para indicar la posición donde se colocará la imagen de frente.

ImageMagickObject.MagickImageClass imagen = new MagickImageClass();
object[] parametros = new object[5];
parametros[0] = "c:\imagen_de_frente.jpg";
parametros[1] = "c:\imagen_de_fondo.gif";
parametros[2] = "-geometry";
parametros[3] = "+10+20";
parametros[4] = "c:\nombreNuevaImagen.png";
imagen.Composite(ref parametros);

Notese que en este caso el valor de geometria solo debe indicar la posición donde se colocará la imagen de frente sobre la imagen de fondo. Aprender el uso de las indicaciones de geometria es muy útil para utilizar con exactitud instrucciones más avanzadas y de efectos más complejos que yo aun no utilizo.


Bueno, aquí queda para compartirlo con quien le sirva y que quien lo quiera mejorar pueda hacerlo.

0 comentarios:

Publicar un comentario

Por favor trata de escribir bien, no te pido que no te falte ni un acento pero por favor evita escribir como metroflogger o facebookero. Este blog es un sitio decente. Gracias.

Subscribe to RSS Feed Follow me on Twitter!