我的目录中包含很多图像,但是它们的方向错误。我想将图像旋转到正确的方向(大多数为±90 o)。使用图像(shotwell照片)查看器,我可以通过单击“旋转”按钮分别旋转它们,但这太繁琐了。
我看了看man shotwell
,并shotwell --help-all
但没有什么解释如何从命令行调用旋转命令。
有什么方法可以从终端调用Shotwell(或任何其他查看器)的旋转命令?或者也欢迎任何其他旋转图像的方法。
我的目录中包含很多图像,但是它们的方向错误。我想将图像旋转到正确的方向(大多数为±90 o)。使用图像(shotwell照片)查看器,我可以通过单击“旋转”按钮分别旋转它们,但这太繁琐了。
我看了看man shotwell
,并shotwell --help-all
但没有什么解释如何从命令行调用旋转命令。
有什么方法可以从终端调用Shotwell(或任何其他查看器)的旋转命令?或者也欢迎任何其他旋转图像的方法。
Answers:
如果要就地覆盖,mogrify
则从ImageMagick套件中似乎是实现此目的的最简单方法:
# counterclockwise:
mogrify -rotate -90 *.jpg
# clockwise:
mogrify -rotate 90 *.jpg
注意:这不是JPEG文件的无损旋转方法,https : //www.imagemagick.org/discourse-server/viewtopic.php?t=5899。
jpegtran
实现以下目标(未测试):
# counterclockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270
# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90
mogrify
对于JPEG文件而言,这似乎不是无损的,但事实并非如此jpegtran
。
一个不错的解决方案是制作一组备份(例如带前缀backup-
),旋转原始文件,生成一组新文件(以前缀为rotated-
),为您提供一组备份。
img-1.png
backup-img-1.png
rotated-img-1.png
img-2.png
该mv
/ cp
工具[bash的通配]只能添加前缀,它的混乱把他们带走(它会使用参数扩展,EWWW ...)
该rename
工具允许您使用s/before/after/
替换语法(来自该sed
工具)来交换保护字冠并覆盖原始文件,因此,给定图片集img-
{1..n}的总体处理为.png
:
for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done
for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done
注意:
cp
而不是mv
,但是可以使用原始副本的2个副本(缺点是您可以将前缀“ rotated-backup-
...” 串联起来)-rotate 270
使您逆时针旋转90°)echo "Rotating ${imgf#backup-} ... ";
在convert
调用后添加(在之前done
)更紧凑的形式(例如一组编号的文件的),使用一些参数扩展等echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";
代替
(您不能在同一bash参数扩展中删除前缀和后缀,因此请使用cut
)
然后,在验证完您没弄乱的图片后,将其移回原图以将其删除
rename 's/^rotated-//;' rotated-*
rm backup-img-*