gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:11:37 25 4
gpt4 key购买 nike

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

我可以使用 Surface.write_to_png 来让它工作,但我想知道是否有一种方法可以做到这一点而不必将其保存到文件中。我记得以前用过这个,但它是针对黑白图像的,这解释了为什么我以前没有问题。

最佳答案

变化的本质告诉我们图像上的蓝色和红色 channel 已经交换。在这种情况下,这意味着 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')

关于python - 为什么开罗会弄乱我的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com