0

我是 NativeScript 的新手,我正在尝试使用相机模块捕获图像(这工作正常),并将其转换为 base64(这不起作用)并 POST 到服务器。

我已经google了好几天了。您可以提供的任何帮助将不胜感激。

我已经尝试了大约 160 亿种不同的方法,这是我当前的代码:

 viewModel.takePicture1 = function() {
    camera.requestPermissions();
    var isAvailable = camera.isAvailable(); 
    console.log(isAvailable);

    var options = { width: 640, keepAspectRatio: true, saveToGallery: false };


    camera.takePicture().then(function (img) { 
        try{
            var imageData = img.toBase64String("jpeg"); // fails here
            console.log(imageData);
        }catch(err){
            console.log("Error: "+err);
        }

        http.request({
            url: "http://[server address]/lab/ns_exp/upload_test.php",
            method: "POST",
            headers: { "Content-Type": "application/base64" },
            content: imageData
        }).then(function() { 
            console.log("Upload successful");
        }).catch(function(e) { 
            console.log("Unsuccessful upload", e);
        });
    });
}//

哦,我确实想明确表示我没有使用角度(显然),所以请不要提供这样做的答案。:)(Vuejs 坚持)

4

1 回答 1

0

这里的关键是base64需要知道图片是JPEG,图片应该是什么质量。代码应如下所示:

camera.takePicture(cameraOptions)
    .then(imageAsset => {
        imageSource.fromAsset(imageAsset).then(res => {
            myImageSource = res;
            var base64 = myImageSource.toBase64String("jpeg", 100);

以防万一有人稍后发现并想知道将图像(UI)和/或图像(base64)放入 observableArray,这是我的完整功能:

viewModel.takePhoto = function(){
    var self = this;
    camera.requestPermissions();
    var cameraOptions = { width: 640, keepAspectRatio: true, saveToGallery: false };
    camera.takePicture(cameraOptions)
    .then(imageAsset => {
        imageSource.fromAsset(imageAsset).then(res => {
            myImageSource = res;
            var base64 = myImageSource.toBase64String("jpeg", 100);

            self.photoData.push({"data": base64});

            var image = new imageModule.Image();
            image.src = imageAsset;

            self.photoUI.push({"src": image.src});
            listView.refresh();
        })
    }).catch(function (err) {
        console.log("Error -> " + err.message);
    });
}
于 2017-06-30T20:41:56.693 回答