PyCairo:如何调整图像大小并根据图像中心将其旋转到最终画布
在 PyCairo 中,要调整图像大小并根据图像的中心进行旋转,可以按照以下步骤操作:
ImageSurface
Context.scale()
Context.rotate()
以下是一个示例代码,展示如何根据图像的中心调整大小并旋转图像:
import cairo def resize_and_rotate_image(input_image_path, output_image_path, width_scale, height_scale, angle_degrees): # 创建一个图像表面用于输出 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 400, 400) # 输出画布大小 ctx = cairo.Context(surface) # 加载图像 img_surface = cairo.ImageSurface.create_from_png(input_image_path) # 获取图像的原始宽度和高度 img_width = img_surface.get_width() img_height = img_surface.get_height() # 计算旋转中心(图像的中心) center_x = img_width / 2 center_y = img_height / 2 # 计算缩放后的图像尺寸 new_width = img_width * width_scale new_height = img_height * height_scale # 计算图像绘制时的偏移量,使图像的中心对齐 offset_x = (400 - new_width) / 2 # 偏移量使得旋转后的图像居中 offset_y = (400 - new_height) / 2 # 偏移量使得旋转后的图像居中 # 设置旋转的角度(转为弧度) angle_radians = angle_degrees * (3.14159 / 180) # 平移到图像的中心 ctx.translate(offset_x + new_width / 2, offset_y + new_height / 2) # 旋转 ctx.rotate(angle_radians) # 缩放图像 ctx.scale(width_scale, height_scale) # 绘制图像 ctx.set_source_surface(img_surface, -center_x, -center_y) # 使用图像的中心坐标 ctx.paint() # 将图像绘制到当前表面 # 保存最终图像 surface.write_to_png(output_image_path) print(f"Image saved to {output_image_path}") # 使用示例 resize_and_rotate_image("input_image.png", "output_image.png", 0.5, 0.5, 45)
img_surface = cairo.ImageSurface.create_from_png(input_image_path)
img_width / 2
img_height / 2
ctx.scale(width_scale, height_scale)
width_scale
height_scale
ctx.rotate(angle_radians)
angle_radians = angle_degrees * (3.14159 / 180)
ctx.translate()
400x400
ctx.rotate()
希望这能解决您的问题!如果有更多问题或需要进一步的解释,请随时告诉我。