离子电容器相机,生成完整质量的图像并显示它,而无需生成Base64和DataUri

问题描述 投票:-1回答:1

在我的Ionic项目中,我正在使用Capacitor在移动平台中进行部署。

为了从设备捕获图像,我正在使用电容器相机,它可以帮助我以三种格式获取图像。1. Base64。2. DataUrl。3. FileUri。

onCaptureImage() {
    if (!Capacitor.isPluginAvailable('Camera')) {
      this._sharedService.showToastMessage(
        'Unable To Open Camera', 1000);
      return;
    }
    Plugins.Camera.getPhoto({
      quality: 60,
      source: CameraSource.Prompt,
      correctOrientation: true,
      resultType: CameraResultType.DataUrl
    })
      .then(image => {
        const blobImg = this._sharedService.dataURItoBlob(image.dataUrl);
        this.myfiles.push(blobImg);
        this.urls.push(this.sanitizer.bypassSecurityTrustUrl(image.dataUrl));
      })
      .catch(error => {
        return false;
      });
  }

从此DataUrl中我用来显示图像并上传该图像,我将其转换为Blob,然后通过FormData发送。

现在质量是60,我希望质量是100。但是当我们从100个质量图像中生成DataUrl时,它挂起了设备。

[我只想知道有什么方法可以生成质量为100的FileUri,也可以预览图像而无需从中生成Base64DataUrl

谢谢。

angular ionic-framework ionic4 capacitor
1个回答
0
投票

巨大的base64字符串的大小是应用程序挂起的原因。看看这个解决方案...

如下使用相机设置

Camera.getPhoto({
    quality: 100,
    resultType: CameraResultType.Uri,
    source: CameraSource.Prompt
  }).then((image) => {
//imgSrc is passed to src of img tag
imgSrc = this.domSanitizer.bypassSecurityTrustResourceUrl(image && (image.webPath));

// image.path is what you will have to send to the uploadPhoto method as uripath
      });

Uri格式将为您提供本地文件路径,可以轻松地将其传递到文件传输插件... image.path是摄像机返回的本地文件路径。.

用于将文件传输到服务器,您将需要cordova文件传输插件。代码将如下所示。

import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer/ngx';

constructor(private transfer: FileTransfer)

uploadPhoto(fileName:string, uripath:string):Promise<any>{
return new Promise((resolve,reject) => {
  const fileTransfer: FileTransferObject = this.transfer.create();
  const options: FileUploadOptions = {
    fileKey: 'file',
    fileName: fileName,
    mimeType: 'image/jpg',
    chunkedMode: false,
    params: {
      //any params that you want to attach for the server to use
    },
    headers: {
      //any specific headers go here
    }
  };
  fileTransfer.upload(uripath, <APIEndpointURL>, options)
    .then((result) => {
      // success
    resolve(result);
    }, (err) => {
      // error
      reject(err);
    });
});
}

使用此方法,无论图像质量如何,您的服务器都将肯定会接收文件。我在node.js和php服务器上都使用了此方法。

© www.soinside.com 2019 - 2024. All rights reserved.