python-kivy 通过存储在变量中的数据显示图像

Posted

技术标签:

【中文标题】python-kivy 通过存储在变量中的数据显示图像【英文标题】:python-kivy show images by data stored in a variable 【发布时间】:2021-06-03 23:10:32 【问题描述】:

我有没有如下所示的方法,

from kivy.uix.image import Image
from kivy.uix.gridlayout import GridLayout
root=GridLayout(cols=2)
image="all image data as a string"
image=Image(source=image)
root.add_widget(image)
runTouchApp(root)

我试过了,但它只需要图像路径 为什么我这样做是因为我正在做一个应用程序,以便将图像数据作为字符串存储在数据库中,并且我想显示该图像而不将其存储在设备存储中

【问题讨论】:

【参考方案1】:

您可以尝试将数据包装在BytesIO 对象中并将其作为source 传递,如果它不起作用(现在无法测试)您应该可以使用core.image.Image(@ 987654321@),然后使用此图像的texture 属性分配给kivy.uix.image.Image 实例。

编辑:这是一个从内存加载图像的示例,这里使用枕头构造它并将其作为 BytesIO 对象获取,但您可以从数据库中获取源数据。

from io import BytesIO
from pathlib import Path

from kivy.app import App
from kivy.core.image import Image as CoreImage
from kivy.uix.image import Image
# NOTE this import is important to ensure kivy is ready to load an image from memory
from kivy.core.window import Window
from PIL import Image as PillowImage, ImageDraw

WIDTH = 1000

class Application(App):
    def build(self):
        # create a pillow image
        pillow_image = PillowImage.new(mode='RGBA', size=(WIDTH, WIDTH))
        draw = ImageDraw.Draw(pillow_image)
        for x in range(0, WIDTH, 5):
            draw.line((0, x, x, WIDTH), fill=(x, x, x, 255))
            draw.line((x, WIDTH, WIDTH, WIDTH - x), fill=(x, x, x, 255))

            draw.line((WIDTH, WIDTH - x, WIDTH - x, 0), fill=(x, x, x, 255))
            draw.line((WIDTH - x, 0, 0, x), fill=(x, x, x, 255))

        # create bytes from the image data
        image_bytes = BytesIO()
        pillow_image.save(image_bytes, format='png')
        image_bytes.seek(0)

        # load image data in a kivy texture
        core_image = CoreImage(image_bytes, ext='png')
        texture = core_image.texture
        img = Image(texture=texture)
        return img


if __name__ == "__main__":
    Application().run()

【讨论】:

【参考方案2】:

您可以使用图像数据创建Texture,然后将该Texture 分配给Image。请参阅 Texture 和 Image 的文档。

【讨论】:

以上是关于python-kivy 通过存储在变量中的数据显示图像的主要内容,如果未能解决你的问题,请参考以下文章

通过php连接数据库后无法显示存储在MySQL数据库中的图像

使用 ASP.NET 通过 SQL 表显示存储在文本框中的数据

Azure C#,过滤存储在cosmos DB中的原始数据(通过功能URL显示)

考虑到我的图像的链接存储在 MySQL 数据库中,如何通过 php 显示存储在文件夹中的图像

遍历文本文件并为每一行分配变量

如何将 DT_R8 存储在 SSIS 中的变量中