Cambiar el tamaño de las imágenes por lotes a una nueva carpeta usando ImageMagick
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 bajo 2MB
y copiar dsc_big/*
a una carpeta dsc_small/
que ya existe.
Lo intenté convert dsc_big/* -define jpeg:extent=2MB dsc_small/
pero eso produce imágenes llamadas -0
, -1
, y así sucesivamente.
¿Qué hago?
6 answers
convert
está diseñado para manejar un solo archivo de entrada por lo que puedo decir, aunque tengo que admitir que no entiendo la salida que está recibiendo. 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 lo considero peligroso para el uso general (sobrescribirá las imágenes originales si se olvida que -path
) por lo que siempre uso convert
junto con un bucle for para esto:
for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done
La llamada basename
no es necesaria si está procesando archivos en el directorio actual.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-03 04:51:39
Este fue el comando que me ayudó después de un largo intento. Quería hacer miniaturas del mismo tamaño de una gran lista de imágenes grandes que tienen ancho y altura variables . Era para crear una página de galería.
convert -define jpeg:size=250x200 *.jpg -thumbnail 250x200^ -gravity center -extent 250x200 crop/thumbnail-%d.jpeg
Tengo miniaturas de nuevo tamaño que tienen el mismo ancho y alto. :) gracias a ImageMagick.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-25 20:03:13
Aquí hay una solución sin usando bucles for en la consola
convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-01 23:48:15
Aunque esta es una vieja pregunta, pero estoy agregando esta respuesta para el beneficio de cualquier otra persona que tropiece con esto.
Tuve exactamente el mismo problema, y siendo desalentado por el uso de mogrify
, escribí una pequeña utilidad basada en Python llamada easymagick para hacer este proceso más fácil mientras se usa internamente el comando convert
.
Tenga en cuenta que esto todavía es un trabajo en progreso. Apreciaré cualquier tipo de retroalimentación que pueda obtener.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-10 20:55:56
Esto funciona para mí
convert -rotate 90 *.png rotate/image.jpg
Produce image-0.jpg, imagen-1.jpg, imagen-2.jpg ..... en la carpeta 'rotar'. Sin embargo, no sé de una manera de preservar los nombres de archivo originales.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-29 08:00:47
Encontré que cd
-ing en la carpeta deseada, y luego usando la variable global bash $PWD
hizo que mi convert
no arrojara ningún error. Estoy utilizando ImageMagick recientemente implementado caption:
http://www.imagemagick.org/Usage/text/#caption función para etiquetar mis imágenes con el nombre de archivo base y colocarlas 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-15 23:05:26