【问题标题】:Batch resize images into new folder using ImageMagick使用 ImageMagick 将图像批量调整到新文件夹中
【发布时间】:2012-02-01 05:20:47
【问题描述】:

我在4MB 上有一个图像文件夹——我们称这个文件夹为dsc_big/。我想使用convert -define jpeg:extent=2MB 将它们转换为2MB 下,并将dsc_big/* 复制到已经存在的文件夹dsc_small/

我尝试了convert dsc_big/* -define jpeg:extent=2MB dsc_small/,但这会产生名为-0-1 等的图像。

我该怎么办?

【问题讨论】:

    标签: image bash imagemagick filesize


    【解决方案1】:

    convert 据我所知,旨在处理单个输入文件,尽管我不得不承认我不理解您得到的输出。 mogrify 更适合以下风格的批处理:

    mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/*
    

    但老实说,我认为这对于一般用途来说是危险的(如果你忘记了 -path,它会覆盖原始图像)所以我总是使用 convert 加上一个 for 循环:

    for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done
    

    如果您正在处理当前目录中的文件,则无需调用basename

    【讨论】:

    • 我怎么能用mogrify做到这一点?
    • ImageMagick 6.8.0 可以通过转换处理多个文件:convert *.jpg *.png。但是我不知道如何处理输出文件名,因为 ImageMagick 只是将名称设置为序号(即:1.png、2.png、3.png 等)
    • mogrify 中的“-path”似乎已被弃用。一个更新的例子会很棒。 imagemagick.org/script/mogrify.php
    【解决方案2】:

    这是经过长时间尝试后帮助我的命令。 我想从具有可变宽度和高度的大图像列表中制作相同大小的缩略图。用于创建图库页面。

    convert -define jpeg:size=250x200 *.jpg  -thumbnail 250x200^ -gravity center -extent 250x200  crop/thumbnail-%d.jpeg
    

    我得到了重新调整大小的缩略图,它们都具有相同的宽度和高度。 :) 感谢 ImageMagick。

    【讨论】:

      【解决方案3】:

      这是一个没有在控制台上使用 for 循环的解决方案

      convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]'
      

      【讨论】:

        【解决方案4】:

        虽然这是一个老问题,但我添加这个回复是为了让其他偶然发现这个问题的人受益。

        我遇到了同样的问题,并且因使用 mogrify 而气馁,我编写了一个基于 Python 的小型实用程序,名为 easymagick,以便在内部使用 convert 命令时简化此过程。

        请注意,这仍在进行中。如果能得到任何反馈,我将不胜感激。

        【讨论】:

          【解决方案5】:

          我发现cd-ing 到所需的文件夹,然后使用 bash 全局变量 $PWD 使我的 convert 不会抛出任何错误。我正在使用 ImageMagick 最近实现的 caption: http://www.imagemagick.org/Usage/text/#caption 函数来用基本文件名标记我的图像并将它们放在第一个目录中的另一个目录中。

          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
          

          【讨论】:

          • 考虑在以width=...filename=... 开头的行中使用"$f" 而不是$f,以防文件名中包含空格。
          【解决方案6】:

          这对我有用

          convert -rotate 90 *.png rotate/image.jpg 
          

          在“旋转”文件夹中生成 image-0.jpg、image-1.jpg、image-2.jpg .....。不知道如何保留原始文件名。

          【讨论】:

          • 使用mogrify -path rotate -rotate 90 *.png
          猜你喜欢
          • 2012-12-27
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 2015-11-15
          • 1970-01-01
          • 2021-05-25
          • 2021-07-27
          • 1970-01-01
          相关资源
          最近更新 更多