将Cairo ImageSurface转换为PIL Image对象

时间:2015-10-31 12:12:02

标签: python svg ffmpeg python-imaging-library cairo

我正在尝试将Cairo ImageSurface转换为PIL Image对象,以便将其传递给ffmpeg管道。

到目前为止我所拥有的是:

其中svgstr将图像的SVG数据保存为字符串。

img = cairo.ImageSurface(cairo.FORMAT_ARGB32, 386,1080)
ctx = cairo.Context(img)

#render the svg as a png
handle= rsvg.Handle(None, svgstr)
handle.render_cairo(ctx)

imgPIL = Image.frombuffer("RGBA",( img.get_width(),img.get_height() ),img.get_data(),"raw","RGBA",0,1)

img44 = imgPIL.convert("RGBA")
img44.save(p.stdin,"PNG")

如果我将图像保存到文件而不是将其传递给管道,我会得到一些版本的灰度。当传递给管道时,它给出“IOError:[Errno 32] Broken pipe”

最终,我只是想将SVG数据转换为某种对象,我可以将其传递给ffmpeg管道,将图像连接成视频,而不必先将图像保存到磁盘。

0 个答案:

没有答案