【问题标题】:ImageMagick command to convert and save with same nameImageMagick 命令以相同名称转换和保存
【发布时间】:2012-04-17 01:01:35
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: shell imagemagick


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢人。有效。还将检查 exec 和 xargs。再次感谢。
    【解决方案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
    

    【讨论】:

      【解决方案3】:

      另一种方式:

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

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

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

      文档参考:

      【讨论】:

      • 由于某种原因,当输出为 .webp 时,这对我不起作用。
      【解决方案4】:

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

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

      convert::: 之后给出的每个文件调用,{} 被每个调用的文件名替换。这也将并行处理文件,因此它可能比这里的其他解决方案快很多。

      如果你想转换文件类型也可以:

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

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

      【讨论】:

        猜你喜欢
        • 2015-03-02
        • 1970-01-01
        • 1970-01-01
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 2017-06-20
        • 2017-12-21
        相关资源
        最近更新 更多