Плагин Ionic Cordova Camera прерывается с перерывами после того, как снимок сделан (с загрузкой изображения Firebase) - PullRequest
0 голосов
/ 24 августа 2018
uploadImage(filePath: string, camera: boolean = false) {
try {
  let options: CameraOptions;
  if (camera) {
    options = {
      quality: 40,
      destinationType: this._camera.DestinationType.DATA_URL,
      encodingType: this._camera.EncodingType.JPEG,
      mediaType: this._camera.MediaType.PICTURE,
      correctOrientation: true
    }
  } else {
    options = {
      destinationType: this._camera.DestinationType.DATA_URL,
      sourceType: this._camera.PictureSourceType.PHOTOLIBRARY,
      encodingType: this._camera.EncodingType.JPEG,
      mediaType: this._camera.MediaType.PICTURE
    }
  }

  this._camera.getPicture(options).then((imageData) => {
    const photo = `data:image/jpeg;base64,${imageData}`;
    const fileRef = this._afs.ref(filePath);
    const task = fileRef.putString(photo, 'data_url');

    task.snapshotChanges().pipe(
      finalize(() => {
        // execute other actions
        fileRef.getDownloadURL().subscribe(url => {
          if (url) {
            this.fileUploadUrl.next(url);
          }
        })
        let toast = this.toastCtrl.create({
          message: 'Image upload successfully',
          position: 'bottom',
          duration: 3000
        });
        toast.present();
      })
    ).subscribe();
  })

} catch (e) {
  console.error(e);
  let toast = this.toastCtrl.create({
    message: 'Image upload cancelled',
    position: 'bottom',
    duration: 3000
  });
  toast.present();
}

}

После снятой фотографии (с реального устройства iOS) иногда она вылетает, иногда работает нормально. Если я использую фронтальную камеру, она всегда работает. Но если я использую заднюю камеру, после выбранной картинки мигает белый экран и затем приложение перезагружается. Я подозреваю, что это как-то связано с размером изображения или разрешением. Иногда, если я делаю снимок с очень низким разрешением задней камерой (как в условиях слабого освещения), он загружается просто отлично. Я немного исследовал онлайн, некоторые люди предлагают запускать приложение в производственном режиме с флагом --prod, но это не решает проблему. Я также попытался снизить значение качества до более низкого значения, но это не работает с задней камерой.

Я почти уверен, что плагин добавлен правильно и настройки конфиденциальности также верны, иначе он не позволит мне делать снимки.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Это не правильное решение для вашего запроса, но после того, как я потратил ночи на то же самое, я попытался уменьшить изображение и попытался сохранить его менее 2 МБ, и оно работало довольно хорошо. Вы можете уменьшить размер изображения, задав targetWidthи targetHeight.Я держал их обоих ниже 500.

const options: CameraOptions = {
      quality: 30, // picture quality
      destinationType: this.camera.DestinationType.DATA_URL,
      sourceType: this.camera.PictureSourceType.CAMERA,
      encodingType: this.camera.EncodingType.PNG,
      mediaType: this.camera.MediaType.PICTURE,
      cameraDirection: this.camera.Direction.FRONT,
      allowEdit: true,
      correctOrientation    :false,
      targetWidth: 400,
      targetHeight: 400,
    }
0 голосов
/ 24 августа 2018

Да, вы правы.При съемке с использованием камеры с DataURL (например, Base64).мы можем столкнуться с проблемой памяти из-за размера и качества изображения.У вас есть качество 40 с хорошо.Для ширины и высоты вы можете установить около 300 пикселей.

Чем больше размер изображения, тем больше размер изображения, что повлияет на память.

...