【问题标题】:Unable to load image from io.BytesIO in Kivy无法从 Kivy 中的 io.BytesIO 加载图像
【发布时间】:2020-06-22 11:10:17
【问题描述】:

我正在尝试让 Kivy 加载编辑后由 PIL 保存在内存中的图像。我正在使用这个问题的答案作为方法:Load image from memory in Kivy

但是,它不起作用。这是我的代码:

from PIL import Image as PIL_Image

from kivy.app import App
from kivy.core.image import Image as CoreImage
from kivy.uix.image import Image

import io

class MyApp(App):

    def build(self):

        image_from_memory = CoreImage(memory_saved_image, ext='png')
        image_to_show = Image(source='')
        image_to_show.texture = image_from_memory.texture

        return image_to_show

if __name__ == "__main__":
    
    memory_saved_image = io.BytesIO()

    pil_edited_image = PIL_Image.open('test.png')

    # some non-related PIL image editing in here

    pil_edited_image.save(memory_saved_image, 'png')

    MyApp().run()

这是我的错误信息,包括相关的日志信息:

[WARNING] [Image       ] Unable to load image <<_io.BytesIO object at 0x000000000372F108>>
 Traceback (most recent call last):
   File "c:/Users/Вова/Desktop/SO example.py", line 26, in <module>
     MyApp().run()
   File "C:\Users\Вова\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\app.py", line 829, in run
     root = self.build()
   File "c:/Users/Вова/Desktop/SO example.py", line 13, in build
     image_from_memory = CoreImage(memory_saved_image, ext='png')
   File "C:\Users\Вова\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\core\image\__init__.py", line 547, in __init__
     self.load_memory(arg, ext, filename)
   File "C:\Users\Вова\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\core\image\__init__.py", line 783, in load_memory
     keep_data=self._keep_data)
   File "C:\Users\Вова\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\core\image\__init__.py", line 221, in __init__
     self._data = self.load(kwargs.get('rawdata'))
   File "C:\Users\Вова\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\core\image\img_sdl2.py", line 47, in load
     raise Exception('SDL2: Unable to load image')
 Exception: SDL2: Unable to load image

当我尝试使用 PIL 从内存中打开此图像时,它可以工作,因此内存没有损坏。

【问题讨论】:

    标签: kivy


    【解决方案1】:

    显然,PIL 在写入io.BytesIO 对象时不会重置指针。

    image_from_memory = CoreImage(memory_saved_image, ext='png') 之前添加memory_saved_image.seek(0) 有帮助。

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2015-07-25
      • 2018-04-05
      • 2013-01-11
      相关资源
      最近更新 更多