varias - redimensionar imagenes por lotes online
Por lotes cambie el tamaño de las imágenes en una nueva carpeta usando ImageMagick (6)
Tengo una carpeta de imágenes de más de 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.
Intenté convert dsc_big/* -define jpeg:extent=2MB dsc_small/
pero eso produce imágenes llamadas -0
, -1
, y así sucesivamente.
¿Qué debo hacer?
Aquí hay una solución sin usar para los bucles en la consola
convert *.jpeg -define jpeg:extent=2MB -set filename:f ''../dsc_small/%t_small.%e'' +adjoin ''%[filename:f]''
Aunque esta es una vieja pregunta, pero estoy agregando esta respuesta para el beneficio de cualquier otra persona que tropiece con esto.
Tuve el mismo problema y, desalentándome con el uso de mogrify
, escribí una pequeña utilidad basada en Python llamada easymagick para facilitar este proceso mientras usaba el comando convert
.
Tenga en cuenta que esto todavía es un trabajo en progreso. Apreciaré cualquier tipo de comentario que pueda obtener.
Encontré ese cd
-ing en la carpeta deseada, y luego usando la variable global bash $PWD
hice que mi convert
no arrojara ningún error. Estoy utilizando la caption:
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
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 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 miniaturas re-clasificadas que tienen el mismo ancho y alto. :) gracias a ImageMagick.
Esto funciona para mí
convert -rotate 90 *.png rotate/image.jpg
produce image-0.jpg, image-1.jpg, image-2.jpg ..... en la carpeta ''rotar''. Sin embargo, no conozco una forma de preservar los nombres originales de los archivos.
convert
está diseñado para manejar un único archivo de entrada hasta donde yo sé, aunque tengo que admitir que no entiendo el resultado 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, sinceramente, considero que es peligroso para el uso general (sobrescribirá las imágenes originales si se olvida de eso -path
), así 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 de basename
no es necesaria si está procesando archivos en el directorio actual.