Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用NativeScript 3捕获图像并发送到远程服务器_Nativescript_Nativescript Plugin - Fatal编程技术网

如何使用NativeScript 3捕获图像并发送到远程服务器

如何使用NativeScript 3捕获图像并发送到远程服务器,nativescript,nativescript-plugin,Nativescript,Nativescript Plugin,我是NativeScript的新手,我正在尝试使用相机模块捕获图像(这很好),然后将其转换为base64(这不起作用)并发布到服务器 我在谷歌上搜索了好几天。如果您能提供任何帮助,我们将不胜感激 我已经尝试了大约160亿种不同的方法,这是我当前的代码: viewModel.takePicture1 = function() { camera.requestPermissions(); var isAvailable = camera.isAvailable(); co

我是NativeScript的新手,我正在尝试使用相机模块捕获图像(这很好),然后将其转换为base64(这不起作用)并发布到服务器

我在谷歌上搜索了好几天。如果您能提供任何帮助,我们将不胜感激

我已经尝试了大约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);
        });
    });
}//

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

这里的关键是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);
    });
}

您是否尝试过将图片源转换为写入的图像,并将该图像对象转换为base64string
var image=newImageModule.image();image.src=imageAsset我在这里找到了一个解决方案()。显然,toBase64需要知道图像是jpeg格式的,并且需要一个参数来定义质量。齐格马斯,我感谢你的帮助。我链接到的解决方案确实需要你的建议才能奏效——所以你让我半途而废。我很惊讶NativeScript上的用户如此之少。请将此解决方案作为答案发布,并相应地为其他可能遇到相同阻止程序的用户标记。