我正在尝试将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管道,将图像连接成视频,而不必先将图像保存到磁盘。