【问题标题】:Kivy Plyer CameraKivy Plyer 相机
【发布时间】: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

但是:

  1. 当我拍照时,照片在设备的图库中不可见,只有在设备重置后才会显示。
  2. 未调用函数 complete_callback。

【问题讨论】:

  • 猜想:由于与您的complete_callback 未调用相同的问题,该照片在图库中不可见。如果它返回一些奇怪的东西,请从应用程序发布您的日志,否则来自 logcat 的日志就足够了。
  • 不,我发现 complete_callback 的错误在哪里 - 它得到了 filename 参数,但照片在图库中仍然不可见。
  • 所有 kivy 文件仅在设备重启后才会出现。我使用带有 Android 5.0.2 的摩托罗拉 Moto G。
  • 换个设备试试,可能不止一个设备上是这样的。

标签: android kivy


【解决方案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。

    【讨论】:

      猜你喜欢
      • 2019-12-31
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多