小白代码又来啦
如下图:
自定义角度旋转呀
import numpy as np
from PIL import Image
def resize_image_to_fit(image, angle):
"""
缩小图像到刚好适合旋转后不被裁剪
:param image: 原始图像
:param angle: 旋转角度
:return: 缩小后的图像
"""
# 获取原图像尺寸
w, h = image.size
# 计算旋转角度的弧度
angle_rad = np.deg2rad(angle)
# 计算旋转后的最大宽度和高度
cos_angle = np.abs(np.cos(angle_rad))
sin_angle = np.abs(np.sin(angle_rad))
new_w = w * cos_angle + h * sin_angle
new_h = h * cos_angle + w * sin_angle
# 计算缩放比例
scale_factor = min(w / new_w, h / new_h)
# 缩小图像
new_size = (int(w * scale_factor), int(h * scale_factor))
resized_image = image.resize(new_size, Image.ANTIALIAS)
# 将缩小后的图像放置在原始尺寸的画布中央
canvas = Image.new("RGBA", (w, h), (0, 0, 0, 0))
canvas.paste(resized_image, ((w - new_size[0]) // 2, (h - new_size[1]) // 2))
return canvas
def rotate_image(image, angle):
"""
旋转图像但保持尺寸不变
:param image: 原始图像
:param angle: 旋转角度(正数为逆时针,负数为顺时针)
:return: 旋转后的图像,尺寸与原图相同
"""
return image.rotate(angle, resample=Image.BICUBIC, expand=False)
if __name__ == "__main__":
# 打开图片
image = Image.open(r"E:\desktop\output\1.png")
angle = 45
# 缩小图像到刚好适合旋转后不被裁剪
image = resize_image_to_fit(image, angle=angle)
# 旋转图像但保持尺寸不变
image = rotate_image(image, angle=angle)
# 保存、显示处理后的图片
image.save(r"E:\desktop\output\rotated_fitted_no_crop.png")
image.show()
直接从第五十行开始看就好啦!!!!!!!!
最开始做成这样了,哎,四个角没有了