You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用PIL旋转图片后,获取的宽高结果始终相同?

图片旋转后宽度和高度不变的原因是什么?

即使图片已被旋转,我获取到的宽度和高度仍保持相同,请问这一现象的原因是什么?

测试代码

from PIL import Image

with Image.open("pic.jpg") as im:
    rotated_90 = im.rotate(90)
    print(rotated_90.size, "\t", rotated_90.width, rotated_90.height)

    rotated_180 = im.rotate(180)
    print(rotated_180.size, "\t", rotated_180.width, rotated_180.height)

    rotated_270 = im.rotate(270)
    print(rotated_270.size, "\t", rotated_270.width, rotated_270.height)

输出结果

(1049, 590)      1049 590
(1049, 590)      1049 590
(1049, 590)      1049 590

原因分析

这是因为PIL的rotate()方法默认不会调整画布尺寸:

  • 调用rotate()时,它只是在原图像的画布范围内旋转图像内容,旋转后超出原画布的部分会被裁剪,空白区域会用默认背景色(通常是黑色)填充,所以图像的size(宽高)和原图像保持一致。
  • 如果你想让旋转后的图像自动适配新的宽高(比如90/270度旋转后交换宽高),只需要给rotate()加上expand=True参数,此时PIL会自动计算能完整容纳旋转后图像的画布尺寸,宽高就会相应变化。

修改后的示例代码

from PIL import Image

with Image.open("pic.jpg") as im:
    # 添加expand=True参数,自动适配旋转后的画布尺寸
    rotated_90 = im.rotate(90, expand=True)
    print(rotated_90.size, "\t", rotated_90.width, rotated_90.height)

    rotated_180 = im.rotate(180, expand=True)
    print(rotated_180.size, "\t", rotated_180.width, rotated_180.height)

    rotated_270 = im.rotate(270, expand=True)
    print(rotated_270.size, "\t", rotated_270.width, rotated_270.height)

此时90/270度旋转后的输出会变成(590, 1049),180度旋转因为不改变宽高比例,输出仍为原尺寸。

内容的提问来源于stack exchange,提问作者duruburak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:02:16