Nativescript 从原生图像中获取 base64 数据

Nativescript get base64 data from native image

我尝试使用 https://github.com/bradmartin/nativescript-drawingpad 将签名保存到我的后端。但是我根本无法找到从 getDrawing() 获取一些 "useful" 数据的解决方案,其中 returns 一个原生图像对象,例如 iOS 上的 UIImage

我很想 "convert" 将图像数据转换为一些 base64(png 或其他)字符串并将其发送到我的服务器。

我试过类似的东西:

var ImageModule = require("ui/image");
var ImageSourceModule = require("image-source");

elements.drawingpad.getDrawing().then(function(a){
    var image = ImageSourceModule.fromNativeSource( a );
    api.post("sign", image.toBase64String());
});

我也试过 post 就像在演示中看到的那样。

我真的很想看到有关如何使用 "image data" 本身的演示。

谢谢!

感谢@bradmartin 我找到了解决方案:

var image = ImageSourceModule.fromNativeSource(a);
var base64 = image.toBase64String('png');

实际上,经过大量的挖掘和大量的错误,我终于弄明白了。

首先,您必须需要 nativescript-imagepicker 源模块以及 nativescript 图像源。

var imagepicker         = require("nativescript-imagepicker");
var ImageSourceModule   = require("tns-core-modules/image-source");

您想要更新用户个人资料并将 base64 字符串发送到后端进行处理的情况

function changeProfileImage(args) {
    var page = args.object;
    var profile = page.getViewById("profile-avatar");
    var context = imagepicker.create({ mode: "single" });
    context.authorize().then(function() {
        return context.present();
    }).then(function(selection) {
        profile.background = `url(${selection[0]._android})`;
        profile.backgroundRepeat = `no-repeat`;
        profile.backgroundSize = `cover`;

        ImageSourceModule.fromAsset(selection[0]).then(image => {
            var base64 = image.toBase64String('png');
            // console.log(base64);
            uploadMediaFile(base64);
        });
    }).catch(function (e) {
        // process error
        console.log(e);
    });
}