Как вывести прозрачный PNG с Pycairo? - PullRequest
1 голос
/ 21 января 2012

Вот мой код:

import cairo
import os
from PIL import Image

imagesize = (512,128)
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, *imagesize)

cr = cairo.Context(surface)

cr.select_font_face("Verdana", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
cr.set_font_size(24)
cr.set_source_rgb(1, 1, 1)

...

surface.write_to_png("MyImage.png")

Как вы можете видеть, я рисую какой-то белый текст в этом PNG, но фон по умолчанию имеет непрозрачный черный цвет. Как сделать png прозрачным, чтобы отображался только белый текст?

1 Ответ

2 голосов
/ 17 февраля 2013

Я смог установить прозрачный фон, используя set_source_rgba () и используя 0.0 для альфа-значения:

cr.set_source_rgba(0.0, 0.0, 0.0, 0.0) # transparent black
cr.rectangle(0, 0, 512, 128)
cr.fill()


Затем я также должен был написать текст с чем-то вроде этого:

# set writing color to white
cr.set_source_rgb(1, 1, 1)

# write text
cr.move_to(100,50)
cr.show_text("hello")

# commit to surface
cr.stroke()


Вот полный код, который работает для меня:

import os
from PIL import Image

imagesize = (512,128)
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, *imagesize)

cr = cairo.Context(surface)

# paint background
cr.set_source_rgba(0.0, 0.0, 0.0, 0.0) # transparent black
cr.rectangle(0, 0, 512, 128)
cr.fill()

# setup font
cr.select_font_face("Verdana", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMA
cr.set_font_size(24)
cr.set_source_rgb(1, 1, 1)

# write with font
cr.move_to(100,50)
cr.show_text("hello")

# commit to surface
cr.stroke()

# save file
surface.write_to_png("MyImage.png")
...