shell ImageMagick命令转换并保存为相同的名称

rqmkfv5c  于 2023-06-30  发布在  Shell
关注(0)|答案(5)|浏览(76)

我使用ImageMagickconvert命令制作缩略图并将转换后的图像保存在另一个目录中,一个接一个,在PHP中。
但是,无法弄清楚如何在转换后的图像中保留图像名称。

> convert 1.JPG -resize 120X120 thumb/*.JPG

需要保持输出文件名与输入相同。请帮帮我

yzckvree

yzckvree1#

另一种方式:

convert *.jpg -resize 80% -set filename:f '%t' ../'%[filename:f].jpg'

将转换后的文件放在上面的文件夹中。
选项-set filename:f '%t'将属性filename:f设置为不带扩展名的当前文件名。以filename:开头的属性是一种特殊情况,可以在输出文件名中引用。在这里,我们将其设置为../'%[filename:f].jpg,它最终成为图像文件名,并在父目录中将扩展名替换为.jpg

参考文档:

lyr7nygr

lyr7nygr2#

一个简单的解决方案是copy,然后是mogrify -另一个imagemagick工具-这将保持相同的名称,它采用与convert相同的参数。

cp *.jpg thumb/
cd thumb
mogrify -resize 120X120 *.JPG

或者,您也可以使用find -exec或xargs编写一些shell脚本。

# 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/{}
r7s23pms

r7s23pms3#

另一种不需要大量输入的简单方法是GNU Parallel

parallel convert {} -resize 120X120 thumb/{} ::: *.jpg

对于:::之后给出的每个文件,都会调用convert,而对于每个调用,{}都会被替换为文件名。这也将并行处理文件,所以它可能比这里的其他解决方案快得多。
如果您想转换文件类型,它也可以工作:

parallel convert {} {.}.png ::: *.jpg

{.}被替换为不带扩展名的文件名,允许您轻松更改。

wbrvyc0a

wbrvyc0a4#

我是这么做的
将所有文件转换为filename-new.extension

for FILE in *; do convert -resize 320 $FILE $(echo $FILE | sed 's/\./-new./'); done

将所有filename-new.extension文件移回filename.extension

for FILE in *; do mv $FILE $(echo $FILE | sed 's/-new//'); done
kqhtkvqz

kqhtkvqz5#

在Windows中,请改为执行以下操作:

FOR /f "tokens=*" %G IN ('dir /b *.jpg') DO convert %G -resize 120x120 thumb\%G

注意事项:

  • 确保您提前创建了thumb文件夹。
  • 如果您将此部分作为批处理(.bat)文件的一部分,请使用%%代替%
  • 与使用一个convert一次性完成所有操作相比,它的一个好处是内存效率更高,* 可能 *..

相关问题