Как преобразовать путь изображения в base64 в nativescript? - PullRequest
0 голосов
/ 11 января 2019

Я работаю над nativescript и не могу преобразовать локальный путь к изображению в base 64 в native-скрипте.

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 голосов
/ 11 января 2019

Вы используете плагин 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 вам потребуется явная типизация для всех объявленных переменных, поэтому вам необходимо явно объявить о необходимости объявления переменных java и android.

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

Для API Android и iOS вы также можете использовать t ns-platform-декларации (это даже лучший и рекомендуемый подход), но вам все равно нужно объявить переменную java, как показано выше

...