Dividir muchas imagenes de forma automatica con GIMP??

Vereis, resulta que para poder modificar un libro en pdf, me he visto en la obligacion, de pasar todas las paginas a imagen ( unas 175 ) para poder trabajar sobre ellas.

Tengo que dividir por la mitad las 175 imagenes, y en windows, no he encontrado ninguna aplicacion que funcionase para este caso.

Resulta que un compañero me comento, que en gimp se pueden ejecutar scripts que automatizan las tareas, pero no se yo si existira alguna pagina donde existan estos ejemplos de scripts, donde yo pueda modificarl algunos valores, para poder ajustar el recorte de la imagen a mi caso.

La verdad es que puede que alguna de las cosas que haya escrito puedan ser alguna chorrada descomunal, pero no tengo mucha idea del asunto, asi es que perdonad si he puesto alguna barbaridad.

Gracias
También podrías probar con imagemagick. Mira por aquí a ver si tiene esa opción:

http://www.imagemagick.org/script/comma ... ptions.php
PAbLeRoN escribió:También podrías probar con imagemagick. Mira por aquí a ver si tiene esa opción:

http://www.imagemagick.org/script/comma ... ptions.php


He estado buscando, y he encontrado esto, con imagemagick:

http://www.jmarior.net/modules/news/art ... toryid=381

Que parece que puede ajustarse a lo que estoy buscando, pero tengo alguna dudilla.

El script que aparece es este:
rename 'y/A-Z/a-z/' *;
mkdir cropped;
for i in `ls *.png`;
do convert -verbose -crop 780x459+211+310 $i ./cropped/$i;
done;
echo FIN;


Pero yo lo que querria es guardar ambas partes, y hay algunos comandos como el rename 'y/A-Z/a-z/' *; Que no termino de entender su funcion.

Si hubiera alguien habituado a utilizar esta herramienta, podria echarme una mano ??

Gracias
sostaco escribió:
PAbLeRoN escribió:También podrías probar con imagemagick. Mira por aquí a ver si tiene esa opción:

http://www.imagemagick.org/script/comma ... ptions.php


He estado buscando, y he encontrado esto, con imagemagick:

http://www.jmarior.net/modules/news/art ... toryid=381

Que parece que puede ajustarse a lo que estoy buscando, pero tengo alguna dudilla.

El script que aparece es este:
rename 'y/A-Z/a-z/' *;
mkdir cropped;
for i in `ls *.png`;
do convert -verbose -crop 780x459+211+310 $i ./cropped/$i;
done;
echo FIN;


Pero yo lo que querria es guardar ambas partes, y hay algunos comandos como el rename 'y/A-Z/a-z/' *; Que no termino de entender su funcion.

Si hubiera alguien habituado a utilizar esta herramienta, podria echarme una mano ??

Gracias


El script lo que hace es renombrar las imágenes del directorio en el que te encuentres y guardar las imagenes recortadas en otro directorio (cropped) dentro del directorio donde están las imágenes, así que no las va a borrar.
De todas formas lo que podías haber hecho es guardar las imágenes en otro directorio antes de aplicar el script. Vamos es lo que yo haría, hacer copias, es de cajón.

El comando que no entiendes es una expresión de perl que cambia las mayúsculas por minúsculas en los nombres de archivos, si lo aplicas en el directorio donde están las imágenes simplemente las renombrará. Haz un man rename y lo verás. Si no quieres que las renombre puedes borrar esa línea del script.

Saludos:).
A ver en ese script tienes varias cosas que no necesitas, los scripts cuanto más sencillos mejor, si por ejemplo las imágenes son de 800x600 (por poner un ejemplo) pues sería algo así:
for i in `ls *.png`;
do convert -verbose -crop 400x600 $i $i;
done;

con eso te iría creando las dos mitades de cada imagen sin borrar la original y si por ejemplo la imagen se llamaba pag1.png, pues te crearía pag1-0.png y pag1-1.png.

Si tienes imágenes con distintos tamaños puedes hacer algo así (no lo he probado):
for i in `ls *.png`;
do
ow=$(identify -format "%w" $i)
nw=$(expr $ow / 2)
h=$(identify -format "%h" $i)
convert -verbose -crop $nw"x"$h $i $i;
done;

No lo he probado pero debería cortarte la imagnes por la mitad sea cual sea su tamaño

Un saludo.
Einy escribió:Si tienes imágenes con distintos tamaños puedes hacer algo así (no lo he probado):
for i in `ls *.png`;
do
ow=$(identify -format "%w" $i)
nw=$(expr $ow / 2)
h=$(identify -format "%h" $i)
convert -verbose -crop $nw"x"$h $i $i;
done;

No lo he probado pero debería cortarte la imagnes por la mitad sea cual sea su tamaño

Un saludo.


Este es correcto, pero he hecho un par de modificaciones, el codigo que yo he empleado es este:

for i in `ls *.jpg`;
mkdir hojas;
do
ow=$(identify -format "%w" $i)
nw=$(expr $ow / 2)
h=$(identify -format "%h" $i)
convert -verbose -crop $nw"x"$h $i ./hojas/$i;
done;


Asi leera las jpg ( no son pngs ) y me creara una carpeta donde las guarde todas.

Gracias, parece que funciona,
Pues me alegro que vaya bien, es lo primero que se me ha ocurrido sobre la marcha XD.

Un saludo.
Einy escribió:Pues me alegro que vaya bien, es lo primero que se me ha ocurrido sobre la marcha XD.

Un saludo.


Ahora lo que me gustaria saber es como poder "borrar" ( tecnicamente seria mas bien pintar de blanco ) zonas de los bordes de las hojas sueltas ( que son las marcas de las hojas, y del centro del libro al fotocopiarlo.
Ufff eso ya es más complicado, si los bordes tienes el mismo tamaño en todas y ademas el de arriba es igual al de abajo y el de la izquierda igual al de la derecha, se podría redimensionar la imagen(sin escalarla) y añadirle el borde blanco, pero como al ser de fotocopias me imagino que el tamaño de los bordes es bastante aleatorio, no veo la forma de hacerlo automáticamente.

Un saludo
No se como se hace pero se que con imagemagick puedes superponer una imagen a otra.

En el peor de los casos, aunque el tamaño de los márgenes no sean todos iguales puedes sacarlos por porcentajes del tamaño total de la imagen, ajustar una imagen en blanco al tamaño del margen y superponerla en la posición adecuada.

Igual es más fácil decirlo que hacerlo porque ya digo que no me manejo mucho con imagemagick, pero se que es posible porque he visto hacer algo parecido.
Einy escribió:Ufff eso ya es más complicado, si los bordes tienes el mismo tamaño en todas y ademas el de arriba es igual al de abajo y el de la izquierda igual al de la derecha, se podría redimensionar la imagen(sin escalarla) y añadirle el borde blanco, pero como al ser de fotocopias me imagino que el tamaño de los bordes es bastante aleatorio, no veo la forma de hacerlo automáticamente.

Un saludo


No es tan complicado como parece, veras.....

Imagen

En ese caso, es el caso mas exagerado de todos los que he encontrado, ademas, tiene ambas, la muesca de las hojas, y la del centro del libro, por tanto, hay, a mi entender 3 opciones.

1 - Hacer un script que corrija lo del borde derecho, y el central, y aplicarlo sobre las hojas sin dividir
2 - Hacer un escript que corrija los bordes derecho e izq, para aplicarlo sobre las imagenes divididas
3 - Hacer un script en el cual reduzca las imagenes ya divididas a lo mas posible a las zonas pintadas con negro ( algo asi como recortas los border )

Pero claro, no tengo ni zorra de como hacerlo
Si todas la imágenes tienen el contenido más o menos donde esa este script te debería servir.
#!/bin/bash
mkdir hojas
for i in `ls *.jpg`;
do
ow=$(identify -format "%w" $i)
nw=$(expr $ow / 2)
h=$(identify -format "%h" $i)
convert -verbose -crop $nw"x"$h $i ./hojas/$i;
done;
for j in `ls *hojas/*.jpg`;
do
rw=$(expr $nw - 40)
convert -verbose -crop $rw"x"$h+30+0 $j $j;
convert -verbose -border 30x0 -bordercolor white $j $j;
convert -verbose -crop $nw"x"$h+0+0 $j $j;
done;


Si no prueba a jugar con los valores de crop y border, si no entiendes algo del script pregunta ;).

Un saludo
Einy escribió:Si todas la imágenes tienen el contenido más o menos donde esa este script te debería servir.
#!/bin/bash
mkdir hojas
for i in `ls *.jpg`;
do
ow=$(identify -format "%w" $i)
nw=$(expr $ow / 2)
h=$(identify -format "%h" $i)
convert -verbose -crop $nw"x"$h $i ./hojas/$i;
done;
for j in `ls *hojas/*.jpg`;
do
rw=$(expr $nw - 40)
convert -verbose -crop $rw"x"$h+30+0 $j $j;
convert -verbose -border 30x0 -bordercolor white $j $j;
convert -verbose -crop $nw"x"$h+0+0 $j $j;
done;


Si no prueba a jugar con los valores de crop y border, si no entiendes algo del script pregunta ;).

Un saludo


Este es para cortar y unir, o solo para cortar ??

De momento me he estado apañando con el primero que puse:

rename 'y/A-Z/a-z/' *;
mkdir cropped;
for i in `ls *.png`;
do convert -verbose -crop 780x459+211+310 $i ./cropped/$i;
done;
echo FIN;


Modificando los valores, de posicion y tamaño del recorte, pero solo lo hace con las paginas terminadas en -0.png, y no se a que es debido.
Ese que te he puesto es el que ya tenías + poner bordes blancos a las imágenes cortadas, funciona bien con la imagen que has posteado antes prueba con las demás a ver que tal.

Un saludo.
Einy escribió:Ese que te he puesto es el que ya tenías + poner bordes blancos a las imágenes cortadas, funciona bien con la imagen que has posteado antes prueba con las demás a ver que tal.

Un saludo.


Al final lo que he hecho es volver a modificar los valores de posicion del recorte, para que tenga efecto tambien en las otras

Gracias, si quereis luego posteo el resultado, pero vamos, es igual, pero con los bordes recortados
No sé si viene al caso pero lo pongo por si le es útil a alguien.

Esto es un script que hice para pasar los apuntes de una asignatura que estaban en pdf con "4 páginas por página" a 1 página por página (no sé si se entiende) y quitando los márgenes. Claro que los tamaños y demás había que ponerlos a mano.

Lo hice hace un huevo pero sigue funcionando. Y está claro que es mejorable, pero la pereza es lo que tiene.

#!/bin/bash
# Transforma todos los pdfs de un directorio. Corta trozos y los junta en otro pdf.
# Sirve para transformar pdfs de "4 páginas en 1" a "1 página por página".
# Los márgenes son -x -y y los tamaños son -W -H, -r es la resolución, -aa antialiasing
# Los pdfs nuevos en salida/

mkdir salida

for i in *.pdf; do
   mkdir "${i//.pdf/}"
   echo "${i}:"
   for (( j=0; j<$(pdfinfo "${i}" | grep Pages | cut -d ' ' -f 11); j++)); do
         echo -n "   $j -"
         pdftoppm -r 300 -aa yes -x 436 -W 1125 -y 312 -H 841 -f $(($j+1)) -l $(($j+1)) "${i}" "${i//.pdf/}/"$(printf "%03d" $(($j*4+1)))
         echo -n " 1"
         pdftoppm -r 300 -aa yes -x 436 -W 1125 -y 1325 -H 841 -f $(($j+1)) -l $(($j+1)) "${i}" "${i//.pdf/}/"$(printf "%03d" $(($j*4+2)))
         echo -n " 2"
         pdftoppm -r 300 -aa yes -x 1947 -W 1125 -y 312 -H 841 -f $(($j+1)) -l $(($j+1)) "${i}" "${i//.pdf/}/"$(printf "%03d" $(($j*4+3)))
         echo -n " 3"
         pdftoppm -r 300 -aa yes -x 1947 -W 1125 -y 1325 -H 841 -f $(($j+1)) -l $(($j+1)) "${i}" "${i//.pdf/}/"$(printf "%03d" $(($j*4+4)))
         echo " 4"
   done
   
   convert "${i//.pdf/}/*" "salida/${i}"
   rm -r "${i//.pdf/}"
   
   echo ">> Correcto"
   echo
done
Ahora tengo otro problema....


¿¿ Como paso las PNG a pdf ??


He instalado una impresora virtual pdf, y yendo una por una, si que salen bien...... pasandolas con el ImageMagick me devuelve hojas en blanco, y utilizando el sam2p me devuelve este error, y no me deja continuar.

This is sam2p v0.45-3.
Available Loaders: PS PDF JAI PNG JPEG TIFF PNM BMP GIF LBM XPM PCX TGA.
Available Appliers: XWD Meta Empty BMP PNG TIFF6 TIFF6-JAI JPEG-JAI JPEG PNM GIF89a+LZW XPM PSL1C PSL23+PDF PSL2+PDF-JAI P-TrOpBb.
sam2p: Error: PNM: invalid maxval while loading


Probare a ver si consigo hacer un script con el que pueda imprimirlas una por una a traves de la impresora pdf....


¿¿ Alguien sabe algun metodo mas efectivo ??
17 respuestas