如何在nativescript中将图像路径转换为base64?

时间:2019-01-11 12:30:41

标签: angular6 nativescript nativescript-angular

我正在使用本机脚本,无法在本机脚本中将本地图像路径转换为base 64。

private startSelection(context) {

    let that = this;  

    context
    .authorize()
    .then(() => {
        that.imageAssets = [];
        that.imageSrc = null;
        return context.present();
    })
    .then((selection) => {

        //console.log("Selection done: " + JSON.stringify(selection));
        that.imageSrc = that.isSingleMode && selection.length > 0 ? selection[0] : null;
        //console.log( "Hello skdafyvsoa ydfs98a698d8s9" + JSON.stringify(that.imageSrc)); 

       // var base64 = that.imageSrc._android.toBase64String();
        // var base64 = that.imageSrc._android;
        const image = that.imageSrc._android;
        //const imageAsBase64 = image.toBase64String(enums.ImageFormat.png);
        //var data = base64Img.base64Sync(image);
        // console.log(data);

        // set the images to be loaded from the assets with optimal sizes (optimize memory usage)
        selection.forEach(function (element) {
            element.options.width = that.isSingleMode ? that.previewSize : that.thumbSize;
            element.options.height = that.isSingleMode ? that.previewSize : that.thumbSize;
        });

        that.imageAssets = selection;
        this.checkFileupload = true; 
    }).catch(function (e) {
        console.log(e);
    });
}

请帮助提供此代码

_handleReaderLoaded(readerEvt) {
    var binaryString = readerEvt.target.result;

    console.log(binaryString);
           this.base64textString= btoa(binaryString);
           console.log(btoa(binaryString));
   }

我正在使用带有本机脚本的angular 6,并且想要将图像转换为base64并从后端保存到数据库中,而我正在使用sql server。

1 个答案:

答案 0 :(得分:-1)

您正在使用nativescript-imagepicker插件,该插件返回ImageAsset。如注释中所述,您接收的路径不是对图像的直接引用。因此,要发送实际图像的base64表示形式,您需要先创建它,然后对其进行解码。这是在Android上的操作方法。

selection.forEach(element => {
      let asset: ImageAsset = element;

      // if Android
      asset.getImageAsync((bitmap) => {
          console.log(`android.graphics.Bitmap: ${bitmap}`);

          let byteArrayOutputStream = new java.io.ByteArrayOutputStream();
          bitmap.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
          let byteArray = byteArrayOutputStream.toByteArray();
          console.log(`byteArray: ${byteArray}`); // BASE64
    });
});

请注意,我正在访问本机Android API和Java名称空间。在TypeScript中,将需要为所有声明的变量进行显式键入,因此需要显式声明需要声明javaandroid变量。

// somewhere at the beginning of the file
declare let android: any; // or use tns-platform-declarations
declare let java: any;

对于Android和iOS API,您还可以使用t ns-platform-declarations(这是更好的建议方法),但是您仍然需要声明java变量,如上所示