如何使用 NativeScript 3 捕获图像并发送到远程服务器
How can I use NativeScript 3 to capture image and send to a remote server
我是 NativeScript 的新手,我正在尝试使用相机模块捕获图像(这工作正常),并将其转换为 base64(这不起作用)并 POST 到服务器。
我用谷歌搜索了好几天。如果您能提供任何帮助,我们将不胜感激。
我已经尝试了大约 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) and/or 图像 (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);
});
}
我是 NativeScript 的新手,我正在尝试使用相机模块捕获图像(这工作正常),并将其转换为 base64(这不起作用)并 POST 到服务器。
我用谷歌搜索了好几天。如果您能提供任何帮助,我们将不胜感激。
我已经尝试了大约 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) and/or 图像 (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);
});
}