2016-07-24 3 views
0

Я хочу создать приложение, которое снимает фотографии с камеры и покажет эскизы на Android. Связанная часть моего кода:Как импортировать Python PIL на Android и kivy?

from plyer import camera 
from PIL import Image 
. 
. 
. 
    def take_photo_from_camera(self, x): 
     filename = str(random.randint(0, 100000000000)) # create random filenames 
     self.camera.take_picture("/storage/sdcard0/MyApp/%s.jpg"%(filename), self.on_success_shot) 


    def on_success_shot(self, path): 
     #Create a thumbnail of taken photo here using PIL 

Я могу использовать камеру для Android без проблем. Я добавил PIL/подушку требованиям файла kivy buildozer.spec

requirements = kivy, openssl, futures, requests, plyer, pyjnius, pillow 

Когда я хочу создать APK с этой конфигурацией, пакет APK успешно строит, но если я установить APK и работать на мой телефон Android, я получаю эту ошибку в logcat:

I/python (20188): Traceback (most recent call last): 
I/python (20188): File "/home/mnrl/teknik/.buildozer/android/app/main.py", line 32, in <module> 
I/python (20188): File "/home/mnrl/teknik/.buildozer/android/app/_applibs/PIL/Image.py", line 67, in <module> 
I/python (20188): ImportError: dlopen failed: "/data/data/org.tokerteknik.tokerteknik/files/_applibs/PIL/_imaging.so" is 64-bit instead of 32-bit 
I/python (20188): Python for android ended. 

Я думаю, что проблема связана с архитектурой. Я использую ubuntu 16.04 64 бит, а kivy buildozer устанавливает 64-битные библиотеки с помощью pip при установке требований. Аналогичная проблема здесь: https://github.com/kivy/kivy/issues/4095, но решения нет. Вкратце, как я могу импортировать PIL на Android с kivy buildozer или как установить 32-битные библиотеки PIL на 64-битной системе?

+0

Это, вероятно, ошибка в Python-для-андроида, вы в состоянии открыть вопрос на [питон-на-андроид страницы GitHub] (https://github.com/kivy/python-for -android), сообщая также полный журнал построения? – inclement

+0

@inclement Да, я сообщил об этой ошибке для python для страницы android github. Я собираюсь использовать pygame вместо pil для изменения размеров изображений, это работает для меня спасибо :) – mnrl

ответ

0

Используйте pygame вместо PIL для основных процессов обработки изображений. Добавьте pygame в список требований buildozer, он работает без проблем.

import pygame 
picture = pygame.image.load(filepath) 
picture = pygame.transform.scale(picture, (100, 100)) 
pygame.image.save(picture, "scaled_image.png")