Kivy Plyer 相机
Posted
技术标签:
【中文标题】Kivy Plyer 相机【英文标题】:Kivy Plyer Camera 【发布时间】:2016-08-23 02:49:40 【问题描述】:我尝试用 Plyer Camera 制作小应用程序。
def take_shot(self, *args):
self.filepath = IMAGE_PATH
self.time = datetime.now().strftime("%Y%m%d_%H%M%S%f")
self.filename = '0/IMG_1.jpg'.format(self.filepath, self.time)
try:
camera.take_picture(filename=self.filename, on_complete=self.complete_callback)
except NotImplementedError:
self.camera_status = 'Camera is not implemented for your platform'
def complete_callback(self):
try:
im = Image.open(self.filename)
im.thumbnail(Window.size)
outfile = '0/IMG_1-thumbnail.jpg'.format(self.filepath, self.time)
im.save(outfile, "JPEG")
except Exception as e:
self.error = str(e)
return False
但是:
-
当我拍照时,照片在设备的图库中不可见,只有在设备重置后才会显示。
未调用函数 complete_callback。
【问题讨论】:
猜想:由于与您的complete_callback
未调用相同的问题,该照片在图库中不可见。如果它返回一些奇怪的东西,请从应用程序发布您的日志,否则来自 logcat 的日志就足够了。
不,我发现 complete_callback
的错误在哪里 - 它得到了 filename
参数,但照片在图库中仍然不可见。
所有 kivy 文件仅在设备重启后才会出现。我使用带有 android 5.0.2 的摩托罗拉 Moto G。
换个设备试试,可能不止一个设备上是这样的。
【参考方案1】:
所以,我终于解决了画廊的问题,现在我的代码如下所示:
def take_shot(self, *args):
self.time = datetime.now().strftime("%Y%m%d_%H%M%S%f")
filename = '0/IMG_1.jpg'.format(IMAGE_PATH, self.time)
try:
camera.take_picture(filename=filename, on_complete=self.complete_callback)
except NotImplementedError:
self.camera_status = 'Camera is not implemented for your platform'
def complete_callback(self, filename):
try:
Intent = autoclass('android.content.Intent')
PythonActivity = autoclass('org.renpy.android.PythonActivity')
Uri = autoclass('android.net.Uri')
# Push photo into gallery
context = PythonActivity.mActivity
intent = Intent()
uri = 'file://0'.format(filename)
intent.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
intent.setData(Uri.parse(uri))
context.sendBroadcast(intent)
im = Image.open(filename)
im.thumbnail(Window.size)
outfile = '0/IMG_1.jpg'.format(THUMBNAIL_PATH, self.time)
im.save(outfile, "JPEG")
except Exception as e:
Logger.error(str(e))
self.error = str(e)
return False
我希望这对某人有所帮助。
【讨论】:
【参考方案2】:我解决了一个问题。函数complete_callback
必须接受一个参数filename
,我解决了这个问题,现在一切正常。
def take_shot(self, *args):
self.time = datetime.now().strftime("%Y%m%d_%H%M%S%f")
filename = '0/IMG_1.jpg'.format(IMAGE_PATH, self.time)
try:
camera.take_picture(filename=filename, on_complete=self.complete_callback)
except NotImplementedError:
self.camera_status = 'Camera is not implemented for your platform'
def complete_callback(self, filename):
try:
im = Image.open(filename)
im.thumbnail(Window.size)
outfile = '0/IMG_1.jpg'.format(THUMBNAIL_PATH, self.time)
im.save(outfile, "JPEG")
except Exception as e:
self.error = str(e)
return True
但是,所有 kivy 文件仅在设备重新启动后才会出现,我认为我的设备存在这个问题。我在 Android 5.0.2 上使用摩托罗拉 Moto G。
【讨论】:
以上是关于Kivy Plyer 相机的主要内容,如果未能解决你的问题,请参考以下文章
Kivy--Plyer--Android--在应用未运行时发送通知