1、备注:
用于旋转之后的图片的坐标点重计算
可以计算不同旋转中心、不同旋转后图片大小的变换
2、代码
# 输入:
point:原图当中坐标点
w: 原图宽
h:原图高
angle:旋转角度,逆时针方向
rate:原图在变换过程中的缩放比例
nw:变换后图片的宽
nh:变换后图片的高
# 输出变换后图片当中的坐标点
def calculatePoint(point,w,h,rate,nw,nh):
#计算原图当中的旋转中心,并将之设为原图当中的原点
cx=w//2
cy=h//2
# 计算基于新的原点的坐标,图片当中的默认坐标原点是左上
new_center_x = point[0]-cx
new_center_y = cy-point[1]
# 计算当前点到新的原点,也就是旋转中心的距离
lenth_p = math.sqrt(pow(new_center_x,2)+pow(new_center_y,2))
# 在原图当中,坐标点与旋转中心连线与x轴正向的夹角
origin_angle=math.degrees(math.atan2(new_center_y,new_center_x))
# 旋转一定角度之后,坐标点与旋转中心连线与x轴正向的夹角
new_angle=origin_angle+angle
#方便计算,把角度转为正负180度
if new_angle>180:
new_angle-=360
# 原图如果发生缩放,在原图当中的直线也发生缩放
lenth_p =lenth_p*rate
# 使用角度与边长,计算到x轴和y轴的距离
new_x = math.cos(math.radians(new_angle)) * lenth_p
new_y = math.sin(math.radians(new_angle)) * lenth_p
#将坐标轴从旋转中心换回左上
new_cx=nw//2
new_cy=nh//2
nx=int(new_x+new_cx)
ny=int(new_cy-new_y)
return nx,ny
3、变换后效果
选择区域:嘴唇