gpt4 book ai didi

image - kivy:可以使用缓冲区作为图像源吗?

转载 作者:行者123 更新时间:2023-12-04 12:52:41 26 4
gpt4 key购买 nike

我有如下代码,可以从一些现有图像中生成新图像。

from PIL import Image as pyImage

def create_compound_image(back_image_path, fore_image_path, fore_x_position):

back_image_size = get_image_size(back_image_path)
fore_image_size = get_image_size(fore_image_path)

new_image_width = (fore_image_size[0] / 2) + back_image_size[0]
new_image_height = fore_image_size[1] + back_image_size[1]

new_image = create_new_image_canvas(new_image_width, new_image_height)

back_image = pyImage.open(back_image_path)
fore_image = pyImage.open(fore_image_path)

new_image.paste(back_image, (0, 0), mask = None)
new_image.paste(fore_image, (fore_x_position, back_image_size[1]), mask = None)

return new_image

在代码的后面,我有这样的东西:

from kivy.uix.image import Image
img = Image(source = create_compound_image(...))

如果我执行上述操作,我会收到消息:Image.source only accepts string/unicode

如果我从新图像创建一个 StringIO.StringIO() 对象,并尝试将其用作源,则错误消息与上面相同。如果我使用 StringIO 对象的 getvalue() 方法的输出作为源,消息是 source 必须是不带 NULL 字节的编码字符串,而不是 str

在创建 kivy Image 对象时,使用 create_compound_image() 函数的输出作为源的正确方法是什么?

最佳答案

您似乎只想将两个图像合并为一个,实际上您可以使用 Texture.create 创建一个纹理并使用 Texture.blit_buffer 将数据 blit 到特定位置.

from kivy.core.image import Image
from kivy.graphics import Texture

bkimg = Image(bk_img_path)
frimg = Image(fr_img_path)

new_size = ((frimg.texture.size[0]/2) + bkimg.texture.size[0],
frimg.texture.size[1] + bkimg.texture.size[1])

tex = Texture.create(size=new_size)
tex.blit_buffer(pbuffer=bkimg.texture.pixels, pos=(0, 0), size=bkimg.texture.size)
tex.blit_buffer(pbuffer=frimg.texture.pixels, pos=(fore_x_position, bkimg.texture.size[1]), size=frimg.texture.size)

现在你可以像这样在任何地方直接使用这个纹理:

from kivy.uix.image import Image
image = Image()
image.texture = tex

关于image - kivy:可以使用缓冲区作为图像源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20905491/

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