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

5

我有以下代码。它基本上大部分都可以工作。我想要捕捉使用劣质相机的人,并警告他们的照片会很糟糕。(使用“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!');
            });

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

0

Cordova相机插件提供了质量相机选项,但它没有提供任何关于分辨率的信息(默认为100)(在此输入链接描述)


我的质量设置为100,有时图片仍然模糊。我认为这取决于用户的手机相机。 - Kirby
即使您传递50,Android中的默认值仍为100。Android不允许对图像进行降采样。 - taranjeetsapra
获取图像后,有没有办法检查图像是否模糊? - Kirby
根据Android文档,如果没有设置MediaStore.EXTRA_OUTPUT,本机相机可能会拍摄出模糊的图像。MediaStore.EXTRA_OUTPUT用于指定捕获的图像保存的目标位置。在Cordova中,这完全指定为缓存位置。因此,无法获取已捕获图像的模糊图像。 - taranjeetsapra
图片保存后怎么办?在JS中有没有一种方法可以检测模糊的图像?(相对而言?)就像“您从此设备获取的图像很可能是模糊的。我们建议您尝试其他设备。”? - Kirby
不同设备的测试表明,相机首次拍摄的图像不会模糊。在 JavaScript 中没有办法警告/检查从本地捕获的图像质量。 - taranjeetsapra

0

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

从这个答案中复制的相关片段:

HTML5 - 如何获取图像尺寸

从插件文档中得知:“图像作为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高度时发出事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接