我有多个图片存储在一组有序的文件夹中。我需要从它们的父目录递归地将这些图片重新调整到**特定的百分比。我运行的是Ubuntu 11.10,我更喜欢直接从终端学习如何做。
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%
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%
ippsafx73#
您也可以使用
sudo apt install imagemagick sudo apt-get install nautilus-image-converter nautilus -q
用于调整/旋转当前文件夹中的图像。您只需安装,然后右键单击一个或多个图像,选择您想要的大小,这就是它。nautilus -q是停止nautilus。只需再次启动nautilus,你将能够使用图像转换器。
nautilus -q
kqlmhetl4#
如果您给予新的大小调整分辨率,它也可以工作:
convert $f.jpg -size 1024x768 $f.resized.png
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,而不保持当前目录中的纵横比。
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。
vaqhlq817#
有几个答案是这样的:
这将不会工作,因为它会扩展列表如下:convert -resize 50% a.jpg b.jpg c.jpg,它将在c-0.jpg中调整a.jpg的大小,在c-1.jpg中调整b.jpg的大小,并保持c.jpg不变。所以你必须对每个匹配项执行resize命令,并给予输入文件名和输出文件名,如下所示:
convert -resize 50% a.jpg b.jpg c.jpg
c-0.jpg
a.jpg
c-1.jpg
b.jpg
c.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生成输出文件名,方法是将原始的.jpg后缀替换为-th.jpg后缀。然后使用这两个文件名运行convert命令。以下是没有xargs但有find -exec的版本:
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/')' {} \;
bvk5enib8#
老问题,但我发现我认为最简单的方法,也处理空白和非“标准”字符。
find -iname "*.jpg" -exec convert {} -resize 1280x1280 {} \;
(that是我的解决方案与最大尺寸,但如果你想调整到百分比只需适应)
find -iname "*.jpg" -exec convert {} -resize 50% {} \;
8条答案
按热度按时间relj7zay1#
您可以使用imagemagick。例如,要将当前目录下的所有JPG图像的大小调整为原始大小的50%,您可以执行以下操作:
生成的文件名称中会出现两个.jpg。如果这是一个问题,您可以检查以下替代方法。
要遍历/查找要调整大小的文件,您也可以使用xargs。
这将创建图像的副本。如果您只想 * 就地 * 转换它们,您可以用途:
lb3vh1jj2#
从@betabandido扩展答案
如果图像所在的文件名或文件夹名中有空格,则应该在find中使用-print 0,在xargs中使用-0,以避免任何解析错误。
ippsafx73#
您也可以使用
用于调整/旋转当前文件夹中的图像。您只需安装,然后右键单击一个或多个图像,选择您想要的大小,这就是它。
nautilus -q
是停止nautilus。只需再次启动nautilus,你将能够使用图像转换器。kqlmhetl4#
如果您给予新的大小调整分辨率,它也可以工作:
fhity93d5#
你可以使用imagemagick工具批量调整大小。
它将保持纵横比
它将不会保持纵横比
它会将图像大小调整为45x60,而不保持当前目录中的纵横比。
hjqgdpho6#
我稍微修改了接受答案的代码,以包括png文件,并在文件名中添加前缀而不是后缀,从而更容易一次选择所有调整大小的文件。
只需稍加修改,就可以将目录结构重新创建到一个单独的目录,并且只使用相同目录结构的大小调整文件。另一种选择是将目录结构扁平化,随机生成文件名,并通过append收集每个thumb文件到CSV文件的路径Map。
vaqhlq817#
有几个答案是这样的:
这将不会工作,因为它会扩展列表如下:
convert -resize 50% a.jpg b.jpg c.jpg
,它将在c-0.jpg
中调整a.jpg
的大小,在c-1.jpg
中调整b.jpg
的大小,并保持c.jpg
不变。所以你必须对每个匹配项执行resize命令,并给予输入文件名和输出文件名,如下所示:
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
的版本:bvk5enib8#
老问题,但我发现我认为最简单的方法,也处理空白和非“标准”字符。
(that是我的解决方案与最大尺寸,但如果你想调整到百分比只需适应)