如何在不改变图像大小的情况下旋转图像?

22
当使用convert -rotate命令旋转图像时,图像的尺寸会被放大。是否有一种方法可以围绕中心旋转并保持图像大小,裁剪边缘?
4个回答

28

结果并不是用户期望从旋转图像中得到的。 - scrat.squirrel
由于图像尺寸相同且图像区域内的彩色区域相同,文件大小应该是相同的,不是吗?我在一个大小为13kb的二进制图像上尝试了这个操作,但结果却超过了20kb。 - Sigur
@Sigur 错了。动态gif使用某种压缩方式。例如,它可以仅使用帧之间的差异。这是因为不同的帧顺序导致了不同的大小。如果您尝试将普通gif转换为动态gif,则会增加大小,因为需要存储每个帧。 - Enyby
@Enyby,抱歉。我犯了一个错误。我是在谈论旋转单个图像文件。没有gif。 - Sigur
1
@Sigur,对于旋转任何压缩图像都是一样的。只有bmp格式不压缩。所有其他格式都使用压缩。即使所有像素保持相同但重新排序,压缩也可能产生不同的结果。这是翻转情况。在所有其他情况下,像素都会改变 - 在自定义角度上进行任何旋转都会改变所有像素。它会导致不同的大小。它可以更小或更大。 - Enyby
不要忘记将其转换为 PNG。 - yukashima huksay

4

现在似乎只需要这样做就可以了——将其逆时针旋转90度:

$ convert image.jpg -rotate -90 rotated_ccw.jpg

答案不正确。因为作者想保持图像大小并裁剪边缘。 - Enyby

3

如果您知道图像的大小,以下操作可行:

convert -rotate 45 -gravity center -crop NxN input output

使用方形图像进行测试。 可能有一种方法可以指定输入图像的大小为NxN。


0
我在Imagemagick论坛上找到了这个答案:
一个简单的解决方案,不需要知道原始图像的大小,就是使用Alpha合成运算符“Src”作为“裁剪到此图像大小”的操作类型。请参见:

http://www.cit.gu.edu.au/~anthony/graphics/imagick6/compose/#src

例如(仅适用于ImageMagick版本6):
convert image.jpg \( +clone -background black -rotate -45 \) \
    -gravity center -compose Src -composite rotate_cropped_image.png

图片被旋转了,但原图的顶部和底部现在被裁剪掉了...这不是一个很好的结果。 - scrat.squirrel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接