Ios 科尔多瓦拍照不起作用

Ios 科尔多瓦拍照不起作用,ios,cordova,mobile,cordova-plugins,Ios,Cordova,Mobile,Cordova Plugins,我正在开发一个可以拍照的应用程序,我正在与Cordova一起学习。我用了这个js: var takePhoto = function() { navigator.camera.getPicture(onSuccess, onError, { quality: 30, destinationType: Camera.destinationType.FILE_URI, saveToPhotoAlbum: true, targetWidth: 1

我正在开发一个可以拍照的应用程序,我正在与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和最新的cordova插件相机


请让我知道我该怎么做。谢谢大家!

看起来您正在获取返回的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
});

看起来您正在获取返回的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
});

以前都是数据,我只是根据最新的Cordova文档跟踪文件。但我又试了一次,可惜还是没用。谢谢你,好的。好吧,现在你已经把它改回来了,你的代码对我来说很好。您能否以某种方式确认摄影机成功回调实际上正在启动,而不是onFail(或两者都没有)?我想你已经这样做了。在修改语法和Camera.DestinationType.DATA_URI方面做了很多测试,因为在大的“I”中已经起作用了!出于某种奇怪的原因,lol也在“.DestinationType”中围绕大写字母D或小写字母D玩。谢谢兄弟,到目前为止它还在工作。真奇怪!文档必须是错误的,否则它可能只是不同的iOS。抢手货我会编辑我的答案,这样其他人也能找到那个(奇怪的)解决方案。事实上,我知道它是什么。DATA_URI之所以有效,是因为默认值实际上是DATA_URL,所以因为它找不到DATA_URI,所以它只是默认为DATA_URL。真正的原因是您没有将DestinationType大写,因为它在文档中是大写的。它以前都是数据URL,我只是根据最新的Cordova文档跟踪文件URI。但我又试了一次,可惜还是没用。谢谢你,好的。好吧,现在你已经把它改回来了,你的代码对我来说很好。您能否以某种方式确认摄影机成功回调实际上正在启动,而不是onFail(或两者都没有)?我想你已经这样做了。在修改语法和Camera.DestinationType.DATA_URI方面做了很多测试,因为在大的“I”中已经起作用了!出于某种奇怪的原因,lol也在“.DestinationType”中围绕大写字母D或小写字母D玩。谢谢兄弟,到目前为止它还在工作。真奇怪!文档必须是错误的,否则它可能只是不同的iOS。抢手货我会编辑我的答案,这样其他人也能找到那个(奇怪的)解决方案。事实上,我知道它是什么。DATA_URI之所以有效,是因为默认值实际上是DATA_URL,所以因为它找不到DATA_URI,所以它只是默认为DATA_URL。真正的原因是您没有将DestinationType大写,因为它在文档中是大写的。