如何在终端内递归地批量调整Ubuntu中的图像?

时间:2012-05-29 15:55:44

标签: image ubuntu imagemagick ubuntu-11.10

我有多个图像存储在一组有组织的文件夹中。我需要从父目录中将这些图像重新调整为特定百分比递归。我正在运行Ubuntu 11.10,我更喜欢直接从终端学习如何做到这一点。

7 个答案:

答案 0 :(得分:70)

您可以使用imagemagick。例如,要将当前目录下的所有JPG图像调整为其原始大小的50%,您可以执行以下操作:

for f in `find . -name "*.jpg"`
do
    convert $f -resize 50% $f.resized.jpg
done

生成的文件名称中将包含两次“.jpg”。如果这是一个问题,您可以检查以下备选方案。

要遍历/查找要调整大小的文件,您也可以使用xargs。例如:

find . -name "*.jpg" | xargs convert -resize 50%

这将创建图像的副本。如果您只想将到位转换为,则可以使用:

find . -name "*.jpg" | xargs mogrify -resize 50%

答案 1 :(得分:4)

从@betabandido

扩展答案

如果文件名或文件夹名中有空格,那么应该使用-print0和find以及-0和xargs来避免任何解析错误。

find . -name "*.jpg" -print0 | xargs -0 convert -resize 50%
find . -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%

答案 2 :(得分:1)

如果你给出新的调整大小分辨率,它也有效:

convert $f.jpg -size 1024x768 $f.resized.png

答案 3 :(得分:0)

您也可以使用

sudo apt-get install nautilus-image-converter

但这仅适用于当前文件夹中的图像。您只需安装然后右键单击图像或多个图像,然后选择所需尺寸即可。

我相信这也使用了imagemagick。

答案 4 :(得分:0)

您可以使用imagemagick工具进行批量调整大小。

它将保持纵横比

$ convert dragon.gif    -resize 64x64  resize_dragon.gif

不会保持宽高比

$ convert dragon.gif    -resize 64x64\!  exact_dragon.gif

$ cat resize.sh 
#!/bin/bash
for f in `find . -name "*.jpg"`
do
    convert $f -resize 45x60\!  $f.resize.jpg
done

它会将图像大小调整为45x60而不保持当前目录中的宽高比。

答案 5 :(得分:0)

有几个答案,如:

find . -name "*.jpg" | xargs convert -resize 50%

这不会起作用,因为它会像这样展开列表: convert -resize 50% a.jpg b.jpg c.jpg将调整a.jpg中的c-0.jpgb.jpg中的c-1.jpg并让c.jpg不受影响。{/ p>

所以你必须为每个匹配执行resize命令,并给出输入文件名和输出文件名,如下所示:

find . -name "*.jpg" | xargs -n 1 sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'

find的每个匹配都由xargs -n 1分别传递给调整大小脚本:sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'。 此脚本在参数$0中接收文件名,使用sed通过用.jpg替换原始-th.jpg后缀来生成输出文件名。 它使用这两个文件名运行convert命令。

以下是没有xargsfind -exec

的版本
find -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;

答案 6 :(得分:-2)

您可以在ubuntu中复制/粘贴此代码,并将其另存为“resize.sh”

#!/ bin / bash -e

CUR_DIR =`pwd`

cd $ 1

#resize

用于* .jpg;

中的文件

转换$ file -resize 50%$ file;

完成

cd $ CUR_DIR

保存此文件后,使用“./rotate.sh folder_containing_images”从终端运行

有关更多此类内容,请访问here