使用 pyCairo 旋转图像
Rotating an image with pyCairo
我无法理解如何使用 pyCairo 简单地旋转图像...
这是我所做的,基于 this example :
image_surface = cairo.ImageSurface.create_from_png(image_path)
width = image_surface.get_width()
height = image_surface.get_height()
context = cairo.Context(cairo.ImageSurface (cairo.FORMAT_ARGB32, width, height))
context.translate(width*0.5, height*0.5)
context.rotate(45.0*math.pi/180.0)
context.scale(1.0, 1.0)
context.translate(-width*0.5, -height*0.5)
context.set_source_surface(image_surface, 0, 0)
context.paint()
image_surface.write_to_png(output_path)
输出图像与初始图像相同。
我错过了什么?
有2个问题:
您必须使用cairo.ImageSurface
实例写入新图像:
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
context = cairo.Context(surface)
(...)
surface.write_to_png(output_path)
您必须切换指令 context.scale
和 context.translate
:
context.translate(width*0.5, -height*0.5)
context.scale(1.0, 1.0)
顺便说一下,新图片的宽高需要重新计算。
我无法理解如何使用 pyCairo 简单地旋转图像...
这是我所做的,基于 this example :
image_surface = cairo.ImageSurface.create_from_png(image_path)
width = image_surface.get_width()
height = image_surface.get_height()
context = cairo.Context(cairo.ImageSurface (cairo.FORMAT_ARGB32, width, height))
context.translate(width*0.5, height*0.5)
context.rotate(45.0*math.pi/180.0)
context.scale(1.0, 1.0)
context.translate(-width*0.5, -height*0.5)
context.set_source_surface(image_surface, 0, 0)
context.paint()
image_surface.write_to_png(output_path)
输出图像与初始图像相同。 我错过了什么?
有2个问题:
您必须使用
cairo.ImageSurface
实例写入新图像:surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) context = cairo.Context(surface) (...) surface.write_to_png(output_path)
您必须切换指令
context.scale
和context.translate
:context.translate(width*0.5, -height*0.5) context.scale(1.0, 1.0)
顺便说一下,新图片的宽高需要重新计算。