IONIC-я не могу преобразовать 'изображение в base64' - PullRequest
2 голосов
/ 07 апреля 2019

Фотография, которую я сделал с помощью камеры приложения, выглядит как черный экран.Я посмотрел на другие вопросы и попробовал некоторые ответы, но не могу перевести картинку на base64.Не могли бы вы помочь?

Вы можете увидеть весь код по ссылке.https://pastebin.ubuntu.com/p/4FwYdk5fvD/



  takePicture(sourceType: PictureSourceType)
  {
    var options: CameraOptions = {
      quality: 100,
      sourceType: sourceType,
      saveToPhotoAlbum: false,
      correctOrientation: true
    };

    this.camera.getPicture(options).then(imagePath => {
      if (this.plt.is('android') && sourceType === this.camera.PictureSourceType.PHOTOLIBRARY)
      {
        this.filePath.resolveNativePath(imagePath)
          .then(filePath => {
            let correctPath = filePath.substr(0, filePath.lastIndexOf('/') + 1);
            let currentName = imagePath.substring(imagePath.lastIndexOf('/') + 1, imagePath.lastIndexOf('?'));
            this.copyFileToLocalDir(correctPath, currentName, this.createFileName());
          });
      }
      else
      {
        var currentName = imagePath.substr(imagePath.lastIndexOf('/') + 1);
        var correctPath = imagePath.substr(0, imagePath.lastIndexOf('/') + 1);
        this.copyFileToLocalDir(correctPath, currentName, this.createFileName());
      }
    });

  }

1 Ответ

0 голосов
/ 07 апреля 2019

У сорта была такая же проблема. Я также хотел имя (но не путь), и я также хотел базы 64 ... так что я сделал, что это:

takePicture(sourceType: PictureSourceType) {
var options: CameraOptions = {
    quality: 80,
    sourceType: sourceType,
    saveToPhotoAlbum: false,
    correctOrientation: true,
    destinationType: 1,
    targetWidth: 1240,
    targetHeight: 768,
};
this.camera.getPicture(options)
.then((imageData) => {
  this.imgService.convertFilePathToBlob(imageData).subscribe(blob => {
    this.image = blob;
  });

   let correctPath = imageData; // or subStr the parts you want
   let currentName = this.image[1]; // grab the name
   let currentImage = this.image[0]; // the image itself as base64


}).catch((err) => {
  console.warn("takePicture Error: " + err);
});}

и функция преобразования ... не забудьте импортировать File, FileEntry из '@ ionic-native / file / ngx'

convertFilePathToBlob(filePath:string) {
 return from(this.file.resolveLocalFilesystemUrl(filePath)).pipe(
  mergeMap((fileEntry: FileEntry) => {
      return Observable.create(observer => {
          fileEntry.file(file => {
              const reader = new FileReader();
              reader.onloadend = () => {
                  const imgBlob = new Blob([reader.result], { type: file.type });
                  observer.next([imgBlob, file.name]); // the name can be grabbed now
                  observer.complete();
              };
              reader.readAsArrayBuffer(file);
          }, error => {
              observer.error(error);
          });
      });
  }));}

Это работает в моем случае, но я нахожу это безумным, мне пришлось все это делать, и потребовались некоторые отладки и поиск в Google ... я надеюсь, что это поможет вам каким-то образом ...:)

...