2016-01-04 10 views
3

У меня возникли проблемы с пониманием, как просто повернуть изображение с 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) 

Результирующее изображение идентично к исходному изображению. Что мне не хватает?

ответ

3

Есть 2 проблемы:

  1. Вы должны использовать экземпляр cairo.ImageSurface написать новый образ:

    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) 
    context = cairo.Context(surface) 
    (...) 
    surface.write_to_png(output_path) 
    
  2. Вы должны переключить инструкции context.scale и context.translate:

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

Кстати, ширина и высота нового изображения должны быть пересчитаны.

+0

Спасибо. Сейчас он работает. Меня в основном путали с использованием Surface, и я не понял, что для поверхности, которую я написал write_to_png, был создан для контекста, а не тот, который был установлен как source_surface контекста позже. – Kyrill