Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rotating an image with pyCairo

I'm having trouble understanding how to simply rotate an image with pyCairo...

Here's what I did, based on 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)

The output image is identical to the initial image. What am I missing ?

like image 898
Kyrill Avatar asked Jan 04 '16 16:01

Kyrill


1 Answers

There are 2 problems:

  1. You must use the cairo.ImageSurface instance to write the new image:

    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
    context = cairo.Context(surface)
    (...)
    surface.write_to_png(output_path)
    
  2. You must switch the instructions context.scale and context.translate:

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

By the way, the width and height of the the new image should be recalculated.

like image 188
Frodon Avatar answered Oct 05 '22 01:10

Frodon