jueves, 1 de octubre de 2009

HAL también escanea (II)

Provistos de las herramientas adecuadas y consultadas someramente sus respectivas páginas de manual, construir el esquema de nuestro guión para escanear cada página y obtener un pdf ajustado a nuestros intereses es trivial [En cursiva se presentan el nombre del fichero que corresponde a la página escaneada; con rojo y verde indicamos, respectivamente, los ficheros de entrada y de salida implicados en cada parte del proceso]:

scanimage > fichero
unpaper fichero fichero.pbm
convert fichero.pbm fichero.pdf

Se observará que en la primera instrucción hemos omitido la extensión del tipo de fichero (pbm) por mera cuestión de conveniencia. Como sabemos que el fichero es un pbm y, puesto que unpaper producirá también un pbm, evitamos algo más prolijo como:

scanimage > fichero-version-inicial.pbm
unpaper fichero-version-inicial.pmb fichero-version-retocada.pbm
...

Este esquema se puede enriquecer con opciones adecuadas para cada una de las instrucciones que lo componen:

scanimage --resolution 600dpi --mode Lineart --progress > fichero
unpaper --size a4 fichero fichero.pbm
convert -compress Group4 fichero.pbm fichero.pdf

Las opciones de scanimage tienen el siguiente significado:

--resolution 600dpi

Define la resolución que tendrá la imagen resultante. En nuestro caso 600 puntos por pulgada, una resolución bastante alta. Resoluciones inferiores como 300dpi suelen ser suficientes y tienen la ventaja de acelerar la duración del proceso físico del escaneo.

--mode Lineart

Determina la sensibilidad del escáner a las diferencias de matiz o color. En este caso interesa considerar sólo las diferencias entre blancos y negros (modo Lineart), la opción común en páginas de libros convencionales.

--progress

Presenta en la consola o terminal una barra visual del progreso del proceso físico del escaneo.


Por su parte, la opción de unpaper es comprensible de suyo:

--size a4

Retoca el fichero dado como primer argumento para que se adapte a las dimensiones de un tamaño a4. unpaper es un programa sofisticado con un buen número de opciones, aquí nos limitamos a un uso muy básico.


Finalmente, en cuanto a convert tenemos la siguiente opción:

-compress Group4

Determina el algoritmo de compresión que se aplicará en la conversión. Con este algoritmo conseguimos, por ejemplo, que el pdf de una página de nuestro libro ronde los 100k sin apenas pérdida de calidad. Dicho sea de paso, Imagemagick, que es la herramienta general a la que pertenece convert, es una utilidad tremendamente especializada y eficaz en el tratamiento de imágenes. [Más información en http://www.imagemagick.org].


Definida la sucesión de instrucciones que constituye el proceso completo de transformación de la página del libro en un fichero pdf, queda construir un guión que pueda aplicarse a cualquier página en general. No es algo distinto de lo que ya hemos hecho en otras ocasiones (ver, en particular, este artículo).

Por tanto, se trata de añadir lo que sea necesario para poder pedirle a HAL algo como esto:

./escanear-a-pdf Dowland_The-Frog-Galliard_1

donde Dowland_The-Forg-Galliard-1 es el nombre del fichero (sin la extensión .pdf) que alojará el pdf de la hoja del libro correspondiente a la primera página de la pieza de Dowland titulada The Frog Galliard, y donde, por descontado, escanear-a-pdf es el nombre de la instrucción o guión que vamos a diseñar.

El artículo citado antes nos da la pista necesaria para que sea cosa de niños la generalización que deseamos. Basta, como se ve, con sustituir la variable escrita anteriormente con el nombre fichero por un parámetro posicional:

scanimage --resolution 600dpi --mode Lineart --progress > "$1"
unpaper --size a4 "$1" "$1".pbm
convert -compress Group4 "$1".pbm "$1".pdf

(Las comillas que rodean al parámetro posicional ---se recordará--- sirven para evitar problemas cuando el nombre de fichero elegido contiene espacios.)

Podemos, ya que estamos, incluir al final una instrucción de limpieza que elimine los ficheros intermedios:

scanimage --resolution 600dpi --mode Lineart --progress > "$1"
unpaper --size a4 "$1" "$1".pbm
convert -compress Group4 "$1".pbm "$1".pdf
rm "$1" "$1".pbm

Con todo ello estamos en condiciones de producir los pdfs deseados de cuantas páginas del libro vayamos a escanear, por ejemplo:

./escanear-a-pdf Dowland_The-Frog-Galliard-1
./escanear-a-pdf Dowland_The-Frog-Galliard-2
./escanear-a-pdf Dowland_The-Rrog-Galliard-3
./escanear-a-pdf Dowland_Fantasía-1
...


Como decíamos, cosa de niños.

2 comentarios:

  1. Buenos días.

    ¿Dónde podría encontrar un manual de "unpaper"?

    Lo estoy utilizando y me da errores.

    Un saludo y gracias

    ResponderEliminar
  2. La información sobre las opciones de unpaper viene, como es costumbre en las aplicaciones de consola, en forma de página de manual (manpage):

    man unpaper

    Al menos, en sistemas basados en Debian, existe también información añadida que puede consultarse en el directorio /usr/share/doc/unpaper/doc/, a la que se puede acceder mediante cualquier navegador como w3m:

    w3m /usr/share/doc/unpaper/doc/index.html

    ResponderEliminar