用户上传的图片大小不能超过4MB

时间:2019-07-05 05:53:50

标签: camera ionic4

用户不应上传图片

文件大小不能超过4MB

 takePicture() {    //camera option(take image with camera)
        const options: CameraOptions = {
          quality: 70,
          destinationType: this.camera.DestinationType.DATA_URL,
          sourceType: this.camera.PictureSourceType.CAMERA,
          encodingType: this.camera.EncodingType.JPEG,
          mediaType: this.camera.MediaType.PICTURE,
          saveToPhotoAlbum:false
        }

      this.camera.getPicture(options).then((imageData) => {
         this.base64Image = 'data:image/jpeg;base64,' + imageData;
         }, (err) => {
         console.log(err)
        });  
    }

1 个答案:

答案 0 :(得分:1)

您不应为图像使用base64。这是因为它将占用过多的内存,从而使该应用在较旧的设备上崩溃。

更好的解决方案是将其保存到文件中。

您的4mb上传限制与相机插件无关。

您需要其他插件来调整图片大小。

您可能想尝试一下:

但是,通过几次搜索,我找不到任何可以调整为特定目标文件大小的插件。他们只处理尺寸和图像质量更改。

调整图像大小非常简单:

import { ImageResizer, ImageResizerOptions } from '@ionic-native/image-resizer/ngx';

constructor(private imageResizer: ImageResizer) { }

...

let options = {
 uri: uri,
 folderName: 'Protonet',
 quality: 90,
 width: 1280,
 height: 1280
} as ImageResizerOptions;

this.imageResizer
  .resize(options)
  .then((filePath: string) => console.log('FilePath', filePath))
  .catch(e => console.log(e));

要满足您的文件大小要求,我还要做两件事:

  1. 进行实验以查看哪种尺寸/质量等级的图像产生4mb左右的图像
  2. 考虑添加一个文件大小检查,该检查将循环播放,并继续放弃调整大小的选项,这些选项会降低质量/对其进行更多压缩,直到满足您的文件大小要求为止。

问题是输出文件的大小也取决于图像的类型。复杂的图像很难压缩,因此相同的尺寸+压缩比=不同图像的大小不同。

这就是为什么可能需要第二位的原因。或者,您可以设置一个通常为3mb左右的调整大小,以提供足够的缓冲区。这可能是最好的选择,因为将图像调整大小3-4倍以减小到目标文件大小对于用户来说可能很慢。