我在一组组织好的文件夹中存储了多个图像。我需要将这些图像的大小从其父目录递归调整为“特定百分比”。我正在运行 Ubuntu 11.10,我更喜欢学习如何直接从终端执行此操作。
。例如,要将当前目录下的所有 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%
sudo apt install imagemagick
sudo apt-get install nautilus-image-converter
nautilus -q
用于调整当前文件夹中的图像大小/旋转。您只需安装,然后右键单击一个或多个图像并选择您想要的大小即可。
nautilus -q
是停止鹦鹉螺。只需再次启动 nautilus,您就可以使用图像转换器了。
如果图像所在的文件名或文件夹名称中有空格,则应将 -print0 与 find 一起使用,将 -0 与 xargs 一起使用,以避免任何解析错误。
find . -name "*.jpg" -print0 | xargs -0 convert -resize 50%
find . -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%
convert $f.jpg -size 1024x768 $f.resized.png
它将保持纵横比
$ 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,而不保持当前目录中的宽高比。
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
只需稍加修改,就可以将目录结构重新创建到单独的目录,并且仅调整具有相同目录结构的文件大小。另一种选择是扁平化目录结构并随机生成文件名,并通过附加的每个拇指文件收集映射到 CSV 文件的路径。
find -iname "*.jpg" -exec convert {} -resize 1280x1280 {} \;
(这是我的最大尺寸解决方案,但如果你想调整大小到百分比只需适应)
find -iname "*.jpg" -exec convert {} -resize 50% {} \;
find . -name "*.jpg" | xargs convert -resize 50%
这不起作用,因为它会像这样扩展列表:
convert -resize 50% a.jpg b.jpg c.jpg
将调整
a.jpg
中的 c-0.jpg
、b.jpg
中的 c-1.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 -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;
使用ImageMagick;
for f in `find . -name "*.jpg" -or -name "*.JPG" -or -name "*.jpeg" -or -name "*.JPEG"` ; do convert "$f" -resize 700 "$f" ; done
我希望它对你们很多人有帮助;无论如何,它已经保存下来以备我将来的需要。
添加了一项检查,以在源文件具有较小宽度值时跳过调整大小。
#!/bin/bash
max_width=1000
find . -iname "*.jpg" -or -iname "*.JPEG" | while read -r f; do
file_width=$(identify -format "%w" "$f")
if [ "$file_width" -lt $max_width ]; then
echo "$f" has width less than $max_width, skip resizing
else
convert "$f" -resize $max_width "$f"
echo "$f" resized
fi
done