import cairo
import math
w = 2000
h = 2000
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx = cairo.Context(surface)
ctx.scale(w, h)
surface_path = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx_path = cairo.Context(surface_path)
ctx_path.scale(w, h)
surface_circle = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx_circle = cairo.Context(surface_circle)
ctx_circle.scale(w, h)
""" Lots of function calls that draw paths to surface_path and circles to surface_circle """
ctx.set_source_surface(surface_path, 0, 0)
ctx.paint()
ctx.set_source_surface(surface_circle, 0, 0)
ctx.paint()
surface_path.write_to_png("example.png")
surface_circle.write_to_png("example2.png")
surface.write_to_png("result.png")
Imgur link to saved imagesРисунок от одной поверхности к другой поверхности
Я пытающегося собрать две поверхности (одна с линиями, одна с кругами) на одну отдельную поверхность, а затем сохранить, что в файл.
Несмотря на то, что документация предлагает работать, окончательное изображение заканчивается пустым. Я также попытался позвонить flush()
на surface_path
и surface_circle
, но это, казалось, ничего не делало.
Как я могу объединить информацию об изображении в surface_circle
(example2.png) поверх surface_path
(example.png), а затем вывести его в файл?
Я не специалист в Каире, но я считаю, что вам нужна «маска». Например, вы выбираете источник и рисуете линию. По пути линии источник копируется в пункт назначения. Если вы ничего не рисуете, ничего не передается. Я бы предложил вам нарисовать большой прямоугольник размером с изображение. См http://cairographics.org/tutorial/#L1drawing – Cilyan
'ctx.set_source_surface (surface_path, 0, 0) ctx.rectangle (0, 0, 1, 1) ctx.fill() ctx.set_source_surface (surface_circle , 0, 0) ctx.stroke() ctx.rectangle (0, 0, 1, 1) ctx.fill() ctx.stroke() ' Я попробовал этот код, но он все еще не кажется работать. – Sky