科尔多瓦相机插件在从具有文件 URI 的图库中选择时始终返回相同的图像

Cordova camera plugin always return the same image when select from gallery with file URI

本文关键字:选择 图像 返回 URI 相机 插件 文件      更新时间:2023-09-26

升级到最新的 cordova 相机 lib 0.3.4 后,我能够在从图库中选择一个图像后获得真实的图像 uri,返回的文件调用 pic.jpg,但是如果我选择另一个,它将返回具有相同名称的相同图像 pic.jpg,所以我被困在相同的图像:(

图像路径看起来像 file:///storage/emulated/0/android/data/app/cache/.pic.jpg

知道吗?

https://github.com/apache/cordova-plugin-camera/blob/master/src/android/CameraLauncher.java

$scope.getPhoto = function() {
        // Retrieve image file location from specified source
        navigator.camera.getPicture($scope.processImageUri, $scope.onFail, {
            quality: 88,
            correctOrientation: true,
            encodingType: Camera.EncodingType.JPEG,
            destinationType: navigator.camera.DestinationType.FILE_URI,
            sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY,
            allowEdit: true
        });

我在iOS平台(iOS 10.2(上也遇到了这个问题。我不想使用迁移到DATA_URI的公认解决方案,因为我在 iOS 和 Android 之间使用相同的代码,并且只想保留FILE_URI方法。

开始调试,发现是因为获取图片后调用清理函数而发生的。由于在清理调用文件从临时存储中删除,插件为下一张可用的图片提供相同的文件名。从逻辑上讲,这应该没问题,但是这里的Web视图播放邪恶,从其缓存中挑选旧图像,因为URL与以前的URL相同。

我来了一个小修复。测试过,就我而言,它工作正常。

我已经分叉了相机插件存储库并修改了生成临时文件名的方法。

我错过了父存储库的指南,并且我的提交不是必需的格式,所以我想我的拉取请求将被拒绝。(我会在有时间的时候更新并重新创建它(。

但是现在,除非您打算删除/添加平台(可能会从失去更改的主存储库克隆(,否则您可以尝试此解决方案。

在你的

函数之后编写这些代码,并将你的"destinationType:"替换为我的

  function capturePhoto()
	{
      // Take picture using device camera and retrieve image as base64-encoded string
      navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
        destinationType: destinationType.DATA_URL });
    }