Hemen zaude: Hasiera Comunidad Documentación Recetas Restauración batch de libros antiguos en formato PDF.

Restauración batch de libros antiguos en formato PDF.

archive.org se dedica a escanear libros antiguos, al estilo de google books. Estos documentos se pueden descargar como archivos PDF; pero resulta que son las páginas escaneadas en color, a 300 ppp y a veces a 600 ppp. Estos archivos resultan pesados de mover en xpdf; a veces hay que esperar más de 30 segundos a que pase la página. Y no imprimen bien; incluso si hacemos que la impresora funcione en escala de grises, el fondo amarillento del papel se traduce en un gris molesto. Podemos solucionar todo esto usando pdftoppm, convert y gscan2pdf.

Primero hemos de descomponer el pdf descargado, así:

 

pdftoppm -gray original.pdf original-image

 

Con eso, tendremos una imagen pgm por cada página del archivo original.pdf. Las imágenes se llamarán original-image-00000X.pgm y estarán en escala de grises a 150 ppi.

 

Ahora usamos convert (de la suite ImageMagick) para modificar las imágenes. La orden sería (para una sola imagen, luego veremos cómo meterla en un bucle):

 

convert -crop 690x1110+25+40! -level 0%,95%,0.8 -depth 8 -density 150X150 -units PixelsPerInch -depth 8 -unsharp 1 original-image-00000X.pgm original-image-00000X.tiff

 "crop" permite recortar la imagen, para eliminar los márgenes, que no nos interesan. Hay que tener cuidado con estas dimensiones, porque muchas veces las páginas no están bien centradas, y conviene buscar casos extremos de descentrado hacia izquierda, derecha, ariba y abajo para asegurarse de que cogeremos íntegra la caja de texto. Podemos abrir la imagen en Gimp y ver Imagem-> Tamaño del lienzo. Con eso sabremos las dimensiones en pixels. 690x1110 indica el tamaño en píxeles que tendrá la imagen final; la primera medida es el ancho y la segunda el alto. +25+40 es el offset; es decir, estamos eliminando 25 pixels a la izquierda de la página y 40 por arriba. Esto, combinado con el tamaño de la imagen final que queremos, permite ajustar también los márgenes inferiores y derechos. Por ejemplo, si vemos que aún queda mucho margen por la izquierda y la derecha, podriámos decir a crop 680x1110+35+40! en vez de 690x1110+25+40!, reduciendo los márgenes en 10 pixels tanto por la derecha como por la izquierda. Si vemos que nos comemos el inicio de las frases pero que el final ya está bien ajustado, podriamos pasarle 700x1110+15+40!. con lo que desplazaríamos el margen izquierdo 10 pixels hacia la izquierda, pero el margen derecho sigue donde estaba, porque la imagen recortada va a ser ahora 10 pixels más ancha. Por último, la exclamación (!) al final de la geometria indica que convert no debe intentar ajustes automáticos, sino hacer exactamente lo que le hemos pedido.

"level" nos permite ajustar los niveles de la imagen (eliminar el fondo gris) el primer valor se refiere al punto negro; los valores de negro superiores al indicado serán convertidos a negro puro, por tanto lo dejamos en 0, es decir, no modificamos las zonas oscuras para nada. El siguiente valor se refiere al punto blanco; los valores de blanco superiores al indicado serán convertidos a blanco puro. Si el gris del fondo es suave, con indicar un 95 o un 97% lo eliminaremos. Si el gris del fondo es más oscuro, habrá que bajar el valor; un 85% debería de bastar para los peores originales. Por último indicamos el valor de gamma, es decir, cómo afectamos a los tonos medios. El valor gamma es opcional, si no se da, por defecto es 1 (sin corrección gamma). Los valores de gamma varían entre 0.1 y 10. Nosotros queremos oscurecer ligeramente los tonos medios (para que el texto se vea algo mejor) de modo que indicamos un valor de 0.8. Si quisiéramos aclararlos, daríamos un valor > 1.

 

"depth" nos permite indicar el número de bits por pixel, por defecto convert crea los TIFF con una profundidad de 16 bit, y para trabajar en B/N eso es un excesivo. Por tanto indicamos 8, que nos dará los 256 tonos de gris de toda la vida.

 

"density" permite indicar la resolución de la imagen. Conviene pasar el valor; de lo contrario, al recrear el pdf, las imágenes parecerán cuatro veces más grandes, porque se habrán procesado como imáges de 72 ppi. Este es también el motivo de que las guardemos como TIFF y no PNG, por ejemplo.

 

"Units" indica las unidades de resolución. PixelsPerInch -> Pixels por pulgada.

 

"unsharp" permite ajustar lo que Photoshop llama "máscara de enfoque" y GIMP "máscara de desenfoque". Es un ajuste que se usa siempre que queremos preparar una imagen para imprimir, hace que los bordes sean más nítidos. El valor 1 se refiere al radio de la máscara (1 pixel) y es un valor que roza el límite de lo aceptable; un valor mayor hará que aparezca mucho grano en la imagen.

 

Por último, damos el nombre de la imagen a convertir y el del archivo que queremos obtener; basta con indicar la extensión para que convert identifique el formato de salida y haga la conversión correctamente

 

Hacemos un script de una línea para procesar todas las imágenes de una carpeta: acto seguido se creara una nueva carpeta llamada TIFFS y todas las imágenes en formato tiff serán movidas a la nueva carpeta.

 

for i in `ls *.pgm`; do convert -crop 690x1110+25+40! -level 0%,95%,0.8 -depth 8 -density 150X150 -units PixelsPerInch -depth 8 -unsharp 1 $i `echo $i | sed -e 's/pgm/tiff'`;done;mkdir TIFFS;mv *tiff TIFFS

 

Cuando termine, podemos borrar las imágenes pgm con

 

rm *.pgm

 

Pero es mejor no eliminarlas hasta que está uno seguro de que todas las páginas están bien recortadas, esto es, que no nos hemos comido parte de los textos o ilustraciones.

Ahora usamos gscan2pdf para volver a crear nuestro PDF. Pulsamos el botón "importar", se abre una ventana de diálogo, vamos a la carpeta que nos interese, pulsamos Ctrl-A para seleccionar todas las imágenes y aceptamos. Cuando haya terminado de importar, pulsamos el botón "guardar" damos un nombre y un destino, especificamos compresión LZW y a correr. Nuestro nuevo PDF se moverá e imprimirá mucho más rápido y con mayor calidad.