图像旋转算法原理
旋转后图像尺寸计算
def rotate_wh(angle, width, height):
new_height = int(width * fabs(sin(radians(angle))) + height * fabs(cos(radians(angle))))
new_width = int(height * fabs(sin(radians(angle))) + width * fabs(cos(radians(angle))))
return new_width, new_height
图像旋转
根据原图像旋转后左上角的坐标计算旋转后图像的左上角坐标
如下图所示根据A点的坐标计算B点的坐标,A和B都是相对对画布的图像坐标。
def calculate_left_top_point(x, y, angle, w, h, new_w, new_h):
if angle < 0:
angle = angle + 360
else:
angle = angle
if 0 <= angle < 90:
x_left_top = x - h * sin(radians(angle))
y_left_top = y
elif 90 <= angle < 180:
x_left_top = x - new_w
y_left_top = y - h * sin(radians(angle - 90))
elif 180 <= angle < 270:
x_left_top = x - w * cos(radians(angle - 180))
y_left_top = y - new_h
else:
x_left_top = x
y_left_top = y - w * cos(radians(angle - 270))
return x_left_top, y_left_top