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

时间:2012-04-03 11:18:36

标签: shell imagemagick

我正在使用ImageMagick 转换命令制作缩略图&在PHP中将转换后的图像一个接一个地保存在另一个目录中。

但是,无法弄清楚如何在转换后的图像中保留图像名称。

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

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

4 个答案:

答案 0 :(得分:23)

一个简单的解决方案是复制,然后是mogrify - 另一个imagemagick工具 - 这将保留相同的名称,它采用与转换相同的args。

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

答案 1 :(得分:23)

另一种方式:

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

将转换后的文件放在上面的文件夹中。

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

文档参考:

答案 2 :(得分:5)

另一种不涉及大量打字的简单方法是GNU Parallel

parallel convert {} -resize 120X120 thumb/{} ::: *.jpg
convert之后给出的每个文件调用

:::,并将{}替换为每个调用的文件名。这也将并行处理文件,因此它可能比其他解决方案快得多。

如果要转换文件类型,它也可以使用:

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

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

答案 3 :(得分:2)

这就是我的所作所为:

将所有文件转换为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