开罗为什么会弄乱我的颜色?

|
import cairo
from PIL import Image as im

orig_image = im.open(\'Camilla_Belle_photo_3.jpg\') #http://i56.tinypic.com/261i5cn.jpg
surface = cairo.ImageSurface.create_from_png(\'Camilla_Belle_photo_3.png\') #http://i52.tinypic.com/20gmypv.png
context = cairo.Context(surface)
#draw stuff
other_image = im.frombuffer(\'RGBA\', orig_image.size, surface.get_data(), \'raw\', \'RGBA\', 0, 1)
other_image.save(\'test.png\') #resulting image: http://i51.tinypic.com/farns.png
我可以使用ѭ1来使它工作,但我想知道是否有一种方法可以不必将其保存到文件中。我记得以前使用过此功能,但是它是用于黑白图像的,这解释了为什么以前我没有问题。     
已邀请:
更改的性质表明,图像上的蓝色和红色通道已被交换。在这种情况下,这意味着cairo以“蓝绿色红色Alpha”顺序而不是““红色绿色蓝色Alpha””的顺序将像素数据保留在内存中。 幸运的是,Python的PIL提供了对该反转的支持:只需将\“ BGRA \”作为模式参数传递给原始解码器(代替函数调用中的第二个\“ RGBA \”)。 另外,您无需使用PIL打开图像-cairo会直接加载图像,您可以从cairo的表面获取尺寸:
import cairo
from PIL import Image as im

surface = cairo.ImageSurface.create_from_png(\'Camilla_Belle_photo_3.png\') 
context = cairo.Context(surface)
#draw stuff
size = surface.get_width(), surface.get_height()
other_image = im.frombuffer(\'RGBA\', size, surface.get_data(), \'raw\', \'BGRA\', 0, 1)
other_image.save(\'test.png\') 
    

要回复问题请先登录注册