You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需重建APK:Kivy Launcher添加PIL遇_imaging导入报错求方案

解决PIL导入报错及Android截图替代方案

报错根源

_imaging是Pillow(PIL的现代分支)的底层C扩展模块,你手动放置的PIL文件夹只有纯Python代码,缺少适配Android arm64-v8a架构、Python3.11版本编译的.so二进制文件,导致导入失败。另外,ImageGrab是桌面系统专属的API,在Android上原生无法运行,即使解决模块问题也无法正常使用。

无需重建APK的解决步骤

1. 补全Pillow的扩展二进制文件

  • 准备适配文件:
    • 用Buildozer创建一个仅依赖Pillow的测试项目,编译生成APK后,解压APK并从assets/python/lib/python3.11/site-packages/PIL/目录中提取所有.so后缀的文件(例如_imaging.cpython-311.so、_imagingft.cpython-311.so等)。
  • 复制文件到设备:
    • 将这些.so文件拷贝到你设备上的/storage/emulated/0/kivy/PIL/目录,与__init__.py放在同一层级。

2. 替换ImageGrab为Android兼容的截图代码

直接使用Kivy原生的截图API替代ImageGrab,基础示例代码:

from kivy.core.window import Window

# 截取整个窗口并保存为图片
Window.screenshot(name='my_screenshot.png')

如果需要截取指定区域,可结合Kivy的Texture组件实现,示例:

from kivy.core.window import Window
import numpy as np
from PIL import Image

# 获取窗口纹理并截取指定区域(x, y, 宽度, 高度)
texture = Window.screen.texture
region = texture.get_region(100, 100, 500, 500)
# 转换为可处理的像素数组
pixels = np.frombuffer(region.pixels, dtype=np.uint8).reshape(region.height, region.width, 4)
# 保存为图片
img = Image.fromarray(pixels)
img.save('region_screenshot.png')

内容的提问来源于stack exchange,提问作者大橋和季

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:25:08