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

如何使用PIL将正方形图片转换为横版或竖版模式

使用PIL库将正方形图片转为横版/竖版的实现方法

情况1:仅旋转方向(保持正方形尺寸)

如果只是想改变图片的摆放方向(比如把“横放”的正方形转成“竖放”的正方形),用transpose方法旋转90/270度就行——因为原图是正方形,旋转后尺寸不变,只是方向翻转:

from PIL import Image

# 加载你的正方形图片
img = Image.open("square_img.png")

# 顺时针旋转90度,得到竖放的正方形
vertical_square = img.transpose(Image.Transpose.ROTATE_90)
vertical_square.save("vertical_square.png")

# 逆时针旋转90度(等价于顺时针270度),或者旋转180度翻转
horizontal_flipped = img.transpose(Image.Transpose.ROTATE_180)
horizontal_flipped.save("horizontal_flipped.png")

情况2:生成不同比例的横版/竖版(非正方形)

如果需要生成宽大于高的横版(比如16:9)或高大于宽的竖版(比如9:16),可以通过创建新画布粘贴原图,或者裁剪原图部分区域来实现。

方法1:添加背景生成横/竖版

生成横版图片(宽>高)

以16:9比例为例,创建对应尺寸的画布,把原正方形居中粘贴:

from PIL import Image

img = Image.open("square_img.png")
square_side = img.size[0]  # 正方形的边长

# 设定横版比例(这里用16:9)
ratio = 16 / 9
# 画布高度和原正方形一致,宽度按比例计算
canvas_w = int(square_side * ratio)
canvas_h = square_side

# 创建白色背景画布(颜色可自定义,比如(0,0,0)为黑色)
horizontal_canvas = Image.new("RGB", (canvas_w, canvas_h), (255, 255, 255))

# 计算居中粘贴的位置
paste_x = (canvas_w - square_side) // 2
paste_y = 0

# 把原图贴到画布上
horizontal_canvas.paste(img, (paste_x, paste_y))
horizontal_canvas.save("horizontal_version.png")

生成竖版图片(高>宽)

以9:16比例为例:

from PIL import Image

img = Image.open("square_img.png")
square_side = img.size[0]

# 设定竖版比例(9:16)
ratio = 9 / 16
# 画布宽度和原正方形一致,高度按比例计算
canvas_w = square_side
canvas_h = int(square_side / ratio)

# 创建背景画布
vertical_canvas = Image.new("RGB", (canvas_w, canvas_h), (255, 255, 255))

# 计算居中粘贴位置
paste_x = 0
paste_y = (canvas_h - square_side) // 2

vertical_canvas.paste(img, (paste_x, paste_y))
vertical_canvas.save("vertical_version.png")

方法2:裁剪原图生成横/竖版

如果不想添加背景,直接从正方形里裁出对应比例的区域:

裁剪横版

from PIL import Image

img = Image.open("square_img.png")
square_side = img.size[0]

# 目标横版比例16:9
ratio = 16 / 9
crop_h = int(square_side / ratio)
# 裁剪区域格式:(左, 上, 右, 下),取居中部分
crop_box = (0, (square_side - crop_h) // 2, square_side, (square_side + crop_h) // 2)

cropped_horizontal = img.crop(crop_box)
cropped_horizontal.save("cropped_horizontal.png")

裁剪竖版

from PIL import Image

img = Image.open("square_img.png")
square_side = img.size[0]

# 目标竖版比例9:16
ratio = 9 / 16
crop_w = int(square_side * ratio)
# 居中裁剪区域
crop_box = ((square_side - crop_w) // 2, 0, (square_side + crop_w) // 2, square_side)

cropped_vertical = img.crop(crop_box)
cropped_vertical.save("cropped_vertical.png")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:17:38