sábado, 27 de diciembre de 2008

Extrayendo imágenes de documentos PDF

Una forma rápida y sencilla de sacar una imagen de un archivo PDF es tomar una captura de pantalla y recortarla con algún editor de imagen como GIMP. Este procedimiento es muy sencillo, pero no siempre ofrece la mejor calidad ni toda la resolución original de la imágen.

Hay varios programas que permiten extraer las imágenes de un fichero PDF. Voy a comentar uno de ellos: PDF_to_JPG, aunque si lo que buscas es un programa orientado a un propósito más o menos general para un usuario intermedio, te recomiendo que mires el tercer párrafo por el final de esta entrada, donde hablo de PDF Image Extractor.

PDF_to_JPG tiene dos ventajas muy destacables: es libre y extrae las imágenes sin modificarlas (los ficheros PDF suelen contiener las imágenes comprimidas con JPEG, y no es bueno comprimir una imágen muchas veces). Su principal pega es que es un programa reciente y todavía tiene carencias y fallos (hay ficheros PDF que fallan). Este programa tiene una versión compilada para Windows, aunque también puede usarse en Linux si se compila el código fuente.

Su uso es a través de consola (no dispone de una interfaz gráfica), aunque existen procedimientos para facilitar su uso sin necesidad de teclear comandos en plan MS-DOS.

Para usar el programa es necesario descargar el programa y descomprimirlo en una carpeta. Si se usa GNU/Linux habrá que compilar el código fuente (creo que se puede compilar con gcc, más abajo lo explico).

Una vez con una carpeta con los ficheros del programa, se puede empezar a usarle mediante consola, pero es más práctico usar otro procedimiento: usar guiones (scripts) que contengan las instrucciones que se meten por consola. En Windows son los ficheros BAT. Estos ficheros son fáciles de crear, modificar y usar, ya que son ficheros de texto que permiten ejecutar comandos de consola con solo hacerles doble clic, y se pueden modificar con el Bloc de notas. En Linux es muy similar, son ficheros SH y con activarles el permiso de ejecución ya se pueden usar.

Para crear el fichero BAT basta crear en la misma carpeta del programa un fichero de texto nuevo y llamarle "p2j.bat" (o cualquier nombre terminado en .bat). Una vez con este fichero, se pulsa con el botón derecho y se pulsa en editar. Se abrirá el Bloc de notas, en el hay que introducir p2j mis_fotos.pdf /NOASK y se cierra guardando los cambios (por supuesto, cambia mis_fotos.pdf por el nombre de fichero PDF que tengas). Ahora hay que copiar el fichero PDF a la carpeta donde esté el programa y el fichero BAT. Hecho esto haz doble clic sobre el fichero BAT, y el programa empezará a sacar imágenes. Las imágenes van apareciendo en una carpeta nueva que crea el programa llamada "PDF_to_JPG_files". Una vez acabado el proceso, es muy conveniente cambiar el nombre de la carpeta (por ejemplo mis-fotos). Si no se cambia de nombre la carpeta, el programa se detendrá en el siguiente uso y no extraerá imágenes.

Para sacar las imágenes después a otros documentos PDF, solo hay que ir modificando el guión con el nombre esos ficheros (botón derecho->editar), copiar los ficheros PDF a la carpeta del programa, hacerle doble clic sobre el guión (fichero BAT), esperar a que extraiga todos los ficheros y renombrar la carpeta (importante esto último, porque si ya hay creada una carpeta con el nombre "PDF_to_JPG_files" el programa no extrae imágenes).

En GNU/Linux hay que compilar el programa. Para ello hay que usar la consola, y en la carpeta del código fuente usar el comando gcc p2j.c -o p2j Luego, hay que seguir un procedimiento parecido al de Windows, solo que con ficheros SH.

Este programa no siempre funciona bien, algunas imágenes las extrae en rebandas (es más bien un problema del fichero PDF que guarda la imágen así), otras veces salen ficheros corruptos que no pueden ser leídos (fallo del programa). Si en próximas ediciones arreglan este último fallo, lo retocan para que se pueda extraer ficheros desde cualquier directorio (sin necesidad de copiarlo a la carpeta del programa) y crean paquetes de instalacción fácil para Linux (tipo apt-get) sería un programa magnífico a la altura de muchos otros comerciales.

Hay otros programas, en el blog Genbeta hay una entrada dedicada a PDF Image Extractor. Este programa es parecido al que acabo de contar, pero tiene una interfaz gráfica (ventana). Sus pegas es que no es libre, solo funciona en Windows y no permite hacer una extracción usando la compresión JPEG que tenía en el fichero PDF (permite guardarlas en PNG, pero ocupa mucho, y recomprimirlas en JPEG afecta a la calidad). A veces también devuelve imágenes cortadas en rodajas, pero como conté, es más bien culpa del fichero PDF que del programa. En este caso habría que pasar por el GIMP para pegarlas (¿Te imaginas ordenar y pegar las tiras de papel de una trituradora de documentos?).

Si usas Linux puedes usar PdfRipImage, que es parecido al programa anterior ya quetampoco permite aprovechar la compresión JPEG del fichero original, aunque si dispone de una interfaz gráfica. Lo que más se echa de menos es que aún no dispone de paquetes de instalacción fácil, y hay que instalarle compilando el código.

Para la mayoría de gente recomendaría PDF Image Extractor, pero si buscas algo que saque las imágenes de la forma más directa posible para que no se degrade su calidad te recomiendo PDF_to_JPG.

domingo, 14 de diciembre de 2008

Nuevo blog: programando con SVG

No es novedad que este blog no lleva un elevado ritmo de publicación de entradas (a ver si publico una que tengo todavía a medias guardada hace un mes...), y que es más difícil llevar dos blogs a la vez que uno solo, pero aún así he decidido embarcarme en un nuevo blog (sin abandonar este) más orientado a la programación que al diseño.

El tema es que últimamente me picaba la curiosidad por la programación con el formato vectorial SVG (el que usa Inkscape y puede ser visualizado en Opera, Google Chrome y Firefox). Concrétamente he estado trasteando desde dos puntos de vista:
  • Programas que escriben ficheros SVG a partir de unos datos previos (por ejemplo, crear gráficos).
  • Ficheros SVG interactivos similares a los SWF (que puedes manipularles con eventos).
Ya tenía tres miniproyectos a medias, y tenía ganas de ir compartiendo como los hice y los cambios que haga. Como la temática de todo esto se sale (y mucho) de lo que es un blog sobre Inkscape, GIMP y otros programas libres he decidido crear otro blog y ir actualizando los dos poco a poco según pille tiempo.

La dirección será esta:

http://trukossvg.blogspot.com/