shell - convert - imagemagick ubuntu
Comando ImageMagick para convertir y guardar con el mismo nombre (4)
Estoy usando el comando de conversión de ImageMagick para hacer miniaturas y guardar las imágenes convertidas en otro directorio, uno por uno, en PHP.
Pero, no puedo averiguar cómo mantener el nombre de la imagen en la imagen convertida.
> convert 1.JPG -resize 120X120 thumb/*.JPG
es necesario mantener los nombres de los archivos de salida igual que la entrada. Por favor ayuda.
De otra manera:
convert *.jpg -resize 80% -set filename:f ''%t'' ../''%[filename:f].jpg''
Colocará los archivos convertidos en la carpeta de arriba.
La opción -set filename:f ''%t''
establece la propiedad filename:f
al nombre de archivo actual sin la extensión. Propiedades que comienzan con filename:
son un caso especial al que se puede hacer referencia en el nombre de archivo de salida. Aquí lo configuramos como ... / nombre de ../''%[filename:f].jpg
de la ../''%[filename:f].jpg
: ../''%[filename:f].jpg
de ../''%[filename:f].jpg
, que termina siendo el nombre de archivo de la imagen con la extensión reemplazada por .jpg
en el directorio principal.
Referencias de documentación:
-
-set
documentación , que menciona elfilename:
delfilename:
caso especial -
%t
y otras propiedades de formato e impresión de imagen
Esto es lo que hago:
Convertir todos los archivos a filename-new.extension
for FILE in *; do convert -resize 320 $FILE $(echo $FILE | sed ''s//./-new./''); done
Mueva todos los filename-new.extension
nuevo a filename.extension
:
for FILE in *; do mv $FILE $(echo $FILE | sed ''s/-new//''); done
Otra forma fácil que no implica mucha escritura es GNU Parallel :
parallel convert {} -resize 120X120 thumb/{} ::: *.jpg
se llama a convert
para cada uno de los archivos que se dan después de :::
, y {}
se reemplaza con el nombre del archivo para cada invocación. Esto también procesará los archivos en paralelo, por lo que probablemente sea mucho más rápido que las otras soluciones aquí.
También funciona si desea convertir el tipo de archivo:
parallel convert {} {.}.png ::: *.jpg
{.}
se reemplaza con el nombre de archivo sin extensión, lo que le permite cambiarlo fácilmente.
Una solución simple sería copiar, seguido de mogrify, otra herramienta imagemagick, esto mantendrá los mismos nombres, toma todos los mismos argumentos que convertir.
cp *.jpg thumb/
cd thumb
mogrify -resize 120X120 *.JPG
Alternativamente, puedes hacer un poco de shell scripting, usando find -exec o xargs
# using -exec
find . -iname "*.JPG" -maxdepth 1 -exec convert -resize 120x120 {} thumbs/{} /;
# using xargs
find . -iname "*.JPG" -maxdepth 1 | xargs -i{} convert -resize 120x120 {} thumbs/{}