如何将服务端返回的Base64图片转换为KivyMD FitImage?
解决Base64图片转KivyMD FitImage的问题
你的代码无法正常运行,主要是CoreImage的使用方式不适配KivyMD组件,以下是两种可行的修正方案:
方案一:直接创建纹理赋值
import base64 import io from kivy.graphics.texture import Texture # 解码Base64图片数据 image_bytes = base64.b64decode(fish_data['fields']['fish_image']) buf = io.BytesIO(image_bytes) # 创建Kivy纹理并加载图片 texture = Texture.create_from_data(buf.read(), ext='png') # 修正Kivy默认的图片倒置问题 texture.flip_vertical() # 为FitImage设置纹理 self.fish_image.texture = texture
关键修正点
- 替换
CoreImage为Kivy原生的Texture.create_from_data,适配KivyMD组件的纹理加载逻辑 - 添加
texture.flip_vertical(),解决Kivy加载图片时默认倒置的显示问题 - 确保导入
kivy.graphics.texture.Texture模块
方案二:通过临时文件设置source属性
这种方式更贴合FitImage的原生使用逻辑:
import base64 import io import tempfile # 解码Base64数据 image_bytes = base64.b64decode(fish_data['fields']['fish_image']) # 创建临时文件存储图片 with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as temp_file: temp_file.write(image_bytes) temp_img_path = temp_file.name # 直接设置FitImage的source属性 self.fish_image.source = temp_img_path
注意:使用临时文件方案后,若不再需要该图片,记得手动删除临时文件以释放存储空间。
内容的提问来源于stack exchange,提问作者artem abdyushev
相关产品推荐
相关产品推荐

