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

kupeojn6  于 2022-12-22  发布在  其他
关注(0)|答案(8)|浏览(166)

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

relj7zay

relj7zay1#

您可以使用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%
lb3vh1jj

lb3vh1jj2#

从@betabandido扩展答案
如果图像所在的文件名或文件夹名中有空格,则应该在find中使用-print 0,在xargs中使用-0,以避免任何解析错误。

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

ippsafx73#

您也可以使用

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

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

kqlmhetl

kqlmhetl4#

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

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

fhity93d5#

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

hjqgdpho

hjqgdpho6#

我稍微修改了接受答案的代码,以包括png文件,并在文件名中添加前缀而不是后缀,从而更容易一次选择所有调整大小的文件。

for p in `find . -name "*.jpg" -o -name "*.png"`
do
    d=${p%/*}
    f=${p##*/}
    b=${f%.*}
    e=${f##*.}
    convert $p -resize 33% $d/thumb.$b.$e
done

只需稍加修改,就可以将目录结构重新创建到一个单独的目录,并且只使用相同目录结构的大小调整文件。另一种选择是将目录结构扁平化,随机生成文件名,并通过append收集每个thumb文件到CSV文件的路径Map。

vaqhlq81

vaqhlq817#

有几个答案是这样的:

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

这将不会工作,因为它会扩展列表如下:convert -resize 50% a.jpg b.jpg c.jpg,它将在c-0.jpg中调整a.jpg的大小,在c-1.jpg中调整b.jpg的大小,并保持c.jpg不变。
所以你必须对每个匹配项执行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命令。
以下是没有xargs但有find -exec的版本:

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

bvk5enib8#

老问题,但我发现我认为最简单的方法,也处理空白和非“标准”字符。

find -iname "*.jpg" -exec convert {} -resize 1280x1280 {} \;

(that是我的解决方案与最大尺寸,但如果你想调整到百分比只需适应)

find -iname "*.jpg" -exec convert {} -resize 50% {} \;

相关问题