2012-01-03 19 views
38

Tengo una carpeta de imágenes sobre 4MB - llamemos a esta carpeta dsc_big/. Me gustaría usar convert -define jpeg:extent=2MB para convertirlos a menos de 2MB y copiar dsc_big/* en una carpeta dsc_small/ que ya exista.Cambiar el tamaño de las imágenes en una nueva carpeta utilizando ImageMagick

Probé convert dsc_big/* -define jpeg:extent=2MB dsc_small/ pero eso produce imágenes llamadas -0, -1, y así sucesivamente.

¿Qué debo hacer?

Respuesta

48

convert está diseñado para manejar un único archivo de entrada por lo que puedo decir, aunque tengo que admitir que no entiendo la salida que está obteniendo. mogrify es más adecuado para el procesamiento por lotes en el siguiente estilo:

mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/* 

Pero honestamente considero que es peligroso para el uso general (que va a sobrescribir las imágenes originales si se olvida de que -path) así que siempre uso convert junto con una para el lazo para esto:

for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done 

la llamada basename no es necesario si se está procesando los archivos en el directorio actual.

+0

¿Cómo puedo hacer esto con 'mogrify'? – tekknolagi

+2

Agregué un pequeño ejemplo que muestra mogrify y un enlace. –

+1

ImageMagick 6.8.0 puede manejar múltiples archivos con la conversión: 'convert * .jpg * .png'. Sin embargo, no sé cómo manejar los nombres de los archivos de salida, porque ImageMagick acaba de establecer el nombre en un número secuencial (es decir: 1.png, 2.png, 3.png, etc.) –

1

Aunque esta es una vieja pregunta, pero estoy agregando esta respuesta para el beneficio de cualquier otra persona que tropiece con esto.

que tenían el mismo problema exacto, y se desaniman por el uso de mogrify, me escribió una pequeña utilidad basada en Python llamada easymagick para que este proceso sea más fácil, mientras que internamente usando el comando convert.

Tenga en cuenta que esto todavía es un trabajo en progreso. Apreciaré cualquier tipo de comentario que pueda obtener.

0

Esto funciona para mí

convert -rotate 90 *.png rotate/image.jpg 

produce una imagen-0.jpg, imagen-1.jpg, 2.jpg imagen ..... en la carpeta 'rotación'. Sin embargo, no conozco una forma de preservar los nombres originales de los archivos.

+0

Usa 'mogrify -path rotate -rotate 90 * .png' –

0

Encontré que cd -ing en la carpeta deseada, y luego usando la variable global bash $PWD hice que mi convert no arroje ningún error. Estoy utilizando la función recientemente implementada de ImageMagick caption:http://www.imagemagick.org/Usage/text/#caption para etiquetar mis imágenes con el nombre de archivo base y ubicarlas en otro directorio dentro del primero.

cd ~/person/photos 
mkdir labeled 
for f in $PWD/*.JPG; do 
    width=$(identify -format %w $f) 
    filename=$(basename $f .JPG) 
convert -background '#0008' -colorspace transparent -fill white -gravity center -size ${width}x100 caption:"${filename}" ${f} +swap -gravity south -composite "$PWD/labeled/${filename}.jpg"; 
done 
+0

Considera usar' '$ f" 'en lugar de' $ f' en las líneas que comienzan con 'width = ... 'y' filename = ... 'en caso de que haya nombres de archivos con espacios en ellos. –

4

Este fue el comando que me ayudó después de un largo intento. Quería hacer miniaturas del mismo tamaño a partir de una gran lista de imágenes grandes que tienen ancho y alto variables. Fue para crear una página de galería.

convert -define jpeg:size=250x200 *.jpg -thumbnail 250x200^ -gravity center -extent 250x200 crop/thumbnail-%d.jpeg 

Obtuve las miniaturas re-clasificadas, todas con el mismo ancho y alto. :) gracias a ImageMagick.

1

he aquí una solución sin usar bucles en la consola

convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]' 

PD: Si un moderador elimina mi respuesta de 'respuesta repetida' una vez más, nunca estoy en la publicación de desbordamiento de pila de nuevo. Lea la solución, es no idéntica a cualquier otra solución, esta no utiliza los bucles en la consola y utiliza ImageMagick como solicitó la persona que publicó la pregunta. Si se debe eliminar una respuesta, continúe para eliminar las respuestas que usan otros paquetes, ya que en realidad no responden la pregunta

Cuestiones relacionadas