【问题标题】:Rotating an image with pyCairo使用 pyCairo 旋转图像
【发布时间】:2016-04-08 07:53:08
【问题描述】:

我无法理解如何使用 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)

输出图像与初始图像相同。 我错过了什么?

【问题讨论】:

    标签: python cairo pycairo


    【解决方案1】:

    有2个问题:

    1. 您必须使用cairo.ImageSurface 实例来写入新图像:

      surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
      context = cairo.Context(surface)
      (...)
      surface.write_to_png(output_path)
      
    2. 你必须切换指令context.scalecontext.translate

      context.translate(width*0.5, -height*0.5)
      context.scale(1.0, 1.0)
      

    顺便说一下,新图像的宽高应该重新计算。

    【讨论】:

    • 谢谢。它现在正在工作。我主要对 Surface 的使用感到困惑,我没有明白我必须 write_to_png 的 Surface 是为上下文创建的,而不是后来设置为上下文的 source_surface 的那个。
    猜你喜欢
    • 2013-12-15
    • 2011-04-26
    • 2010-12-04
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多