39

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

4

6 回答 6

84

你可以使用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%
于 2012-05-29T16:01:15.720 回答
5

你也可以使用

sudo apt install imagemagick
sudo apt-get install nautilus-image-converter
nautilus -q

用于调整当前文件夹中的图像大小/旋转图像。您只需安装,然后右键单击一个或多个图像,然后选择您想要的大小,就是这样。nautilus -q就是停止鹦鹉螺。只需再次启动 nautilus,您就可以使用图像转换器。

于 2013-11-19T09:23:40.850 回答
5

扩展来自@betabandido 的答案

如果图像所在的文件名或文件夹名称中有空格,则应将 -print0 与 find 一起使用,将 -0 与 xargs 一起使用,以避免任何解析错误。

find . -name "*.jpg" -print0 | xargs -0 convert -resize 50%
find . -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%
于 2015-10-29T19:13:07.153 回答
1

如果您提供新的调整大小分辨率,它也可以工作:

convert $f.jpg -size 1024x768 $f.resized.png
于 2013-05-30T13:42:23.203 回答
1

您可以使用 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,而不保持当前目录中的纵横比。

于 2014-05-28T13:00:56.193 回答
0

有几个答案,例如:

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

这将不起作用,因为它将像这样扩展列表: convert -resize 50% a.jpg b.jpg c.jpg它将调整a.jpgin c-0.jpgb.jpginc-1.jpgc.jpg保持不变。

因此,您必须为每个匹配项执行调整大小命令,并给出输入文件名和输出文件名,例如:

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替换为 1 来生成输出文件名。它使用这两个文件名 运行命令。.jpg-th.jpgconvert

这是没有xargsbut的版本find -exec

find -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;
于 2015-11-12T00:10:57.990 回答