【问题标题】:Cordova takePhoto is not working科尔多瓦 takePhoto 不工作
【发布时间】:2017-01-04 03:59:40
【问题描述】:

我正在开发一个可以拍照的应用程序,我正在使用 Cordova 学习。我用过这个js:

var takePhoto = function() {
    navigator.camera.getPicture(onSuccess, onError, { quality: 30,
        destinationType: Camera.destinationType.FILE_URI,
        saveToPhotoAlbum: true,
        targetWidth: 1500,
        targetHeight: 1500
    });

    function onSuccess(imageData) {
        $('.photoPreview').show();
        var image = document.getElementById('photoSrc');
        image.src = "data:image/jpeg;base64," + imageData;
        photoData = imageData;
        $('#photoMessage').html('');
    }

    function onError(message) {
    }
}

每当我单击按钮时,它都不起作用,也没有任何反应。我用来选择现有照片的功能也是如此:

var selectPhoto = function() {
    navigator.camera.getPicture(onSuccess, onFail, { quality: 30,
        destinationType: Camera.destinationType.FILE_URI,
        sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY,
        targetWidth: 1500,
        targetHeight: 1500
    });

    function onSuccess(imageData) {
        $('.photoPreview').show();
        var image = document.getElementById('photoSrc');
        image.src = "data:image/jpeg;base64," + imageData;
        photoData = imageData;
        $('#photoMessage').html('');
    }

    function onFail(message) {
    }
}

并添加我正在使用的信息

$('#selectPhoto').on('click', function() {
    selectPhoto();
});

$('#takePhoto').on('click', function() {
    takePhoto();
});

还有这个 HTML

 <button id="selectPhoto" class="photo-button">Select Existing Photo</button>
 <button id="takePhoto" class="photo-button">Take New Photo</button>

我正在使用最新的 Cordova 6.4.0、cordova-ios@4.3.1 和来自https://github.com/apache/cordova-plugin-camera 的最新 cordova-plugin-camera

请让我知道我应该做什么。谢谢!

【问题讨论】:

    标签: ios cordova mobile cordova-plugins


    【解决方案1】:

    看起来您正在获取返回的 imageData 并将其作为 base64 数据直接注入 DOM。如果您将相机选项更改为使用 DATA_URL 作为选项返回 base 64,那将可以正常工作。总结:

    navigator.camera.getPicture(onSuccess, onError, { quality: 30,
        destinationType: Camera.destinationType.DATA_URL,
        saveToPhotoAlbum: true,
        targetWidth: 1500,
        targetHeight: 1500
    });
    

    代替:

    navigator.camera.getPicture(onSuccess, onError, { quality: 30,
        destinationType: Camera.destinationType.FILE_URI,
        saveToPhotoAlbum: true,
        targetWidth: 1500,
        targetHeight: 1500
    });
    

    编辑: Jaze 发现了真正的原因,即“destinationType”需要大写。很容易错过!正确的解决方法见下文:

    navigator.camera.getPicture(onSuccess, onError, { quality: 30,
        destinationType: Camera.DestinationType.DATA_URL,
        saveToPhotoAlbum: true,
        targetWidth: 1500,
        targetHeight: 1500
    });
    

    【讨论】:

    • 之前都是DATA_URL,我只是按照最新Cordova文档的FILE_URI。但我再次尝试了 DATA_URL,遗憾的是仍然没有工作。谢谢先生
    • 嗯,好的。好吧,既然你已经把它改回来了,你的代码对我来说看起来很不错。您能否以某种方式确认相机成功回调实际上正在触发,而不是 onFail (或两者都没有)?我假设你已经这样做了。
    • 在更改语法和Camera.DestinationType.DATA_URI 中进行了大量测试,就像在大“i”中一样有效!出于某种奇怪的原因哈哈,也在“.DestinationType”中围绕大写 D 或小 d 播放。谢谢大哥,目前已经可以使用了。
    • 这很奇怪!文档一定是错误的,或者它可能只是 iOS 的不同。接得好!我将编辑我的答案,以便其他人也可以找到该(奇怪的)解决方案。
    • 其实我知道是什么。 DATA_URI 之所以有效,是因为默认值实际上是 DATA_URL,所以由于它找不到 DATA_URI,它只是默认为 DATA_URL。真正的原因是您没有大写 DestinationType,因为它在文档中是大写的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多