使用cordova相机插件时如何检查低分辨率照片?

Posted

技术标签:

【中文标题】使用cordova相机插件时如何检查低分辨率照片?【英文标题】:How do i check for low resolution photos when using cordova camera plugin? 【发布时间】:2017-07-17 12:29:18 【问题描述】:

我有以下代码。它几乎适用于大部分时间。我想用蹩脚的相机捕捉人们,并警告他们他们的照片会发臭。 (使用“cordova-plugin-camera”版本 2.3.0)

           var cameraOpts = 
                quality: 100,
                // destinationType: Camera.DestinationType.FILE_URI,
                destinationType: Camera.DestinationType.DATA_URL,
                sourceType: $scope.sourceType,
                allowEdit: false,
                encodingType: Camera.EncodingType.JPEG,
                // popoverOptions: CameraPopoverOptions,
                targetWidth: 186,
                targetHeight: 1024,
                saveToPhotoAlbum: true,
                correctOrientation: true
            ;

            $cordovaCamera.getPicture(cameraOpts).then(function(imageData) 
                var image = "data:image/jpeg;base64," + imageData;
                $scope.setUpImage(index,image);

            , function(err) 
                // error
                $scope.showAlert('Warning!', 'Camera cancelled!');
            );

任何想法将不胜感激。我正在寻找一种捕捉低分辨率照片并向用户发送消息的方法。

【问题讨论】:

【参考方案1】:

cordova 相机插件提供 quality 相机选项,但它不提供有关分辨率的任何信息(默认为 100)(enter link description here)

【讨论】:

我的画质设置为100,有时候图片还是很模糊。我认为这取决于用户的手机摄像头。 100是android中的默认值,即使你通过50,android也不允许对图像进行下采样。 获取图像后怎么样..有没有办法检查图像是否模糊? 根据 android 文档,如果 MediaStore.EXTRA_OUTPUT 不存在,本机相机可以捕捉到模糊的图像。 MediaStore.EXTRA_OUTPUT 用于指定要保存的捕获图像的目标位置。在 cordova 中,这完全指定为缓存 location.link。所以没有办法得到一个模糊的图像。 图片保存后怎么样? JS中有没有办法检测模糊图像? (相对而言?)比如“您在此设备上拍摄的图像很可能很模糊。我们建议您尝试使用其他设备。”?【参考方案2】:

你应该创建一个 Image 对象(这是标准的 html5 API)

从这个答案复制的相关sn-p:

HTML5 - how to get image dimension

来自插件文档:“图像作为 Base64 编码的字符串或图像文件的 URI 传递给成功回调”

如果您在相机插件中选择base64格式,则数据URI将为

'data:image/jpg;base64,' + imageData

但是,插件文档推荐文件格式,它将返回一个文件 URL,您可以直接将其分配给您的 image.src

var image = new Image();
        image.onload = function(evt) 
            var width = this.width;
            var height = this.height;
            alert (width); // will produce something like 198
        ;

        //here is where you pass the camera data to create the image
image.src = imageData; 

如您所见,该方法是异步的,您可以将其包装在 Promise 中,或者在图像已加载且宽度 x 高度时发出事件

【讨论】:

以上是关于使用cordova相机插件时如何检查低分辨率照片?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Cordova 相机插件选项

使用 Phonegap/Cordova 相机插件从相机或图库中选择照片

拍摄照片后,Ionic cordova 相机插件间歇性崩溃(使用 Firebase 图像上传)

Cordova 应用程序在尝试访问相机时崩溃

使用相机插件拍摄新照片时,PhoneGap 应用程序崩溃

Cordova 相机插件返回绿色图片 Windows Phone 8.1