为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Angular6 中压缩 Base64/二进制图像?

如何在 Angular6 中压缩 Base64/二进制图像?

HUWWW 2021-08-26 16:33:52
我用于Ngx-Webcam从相机捕获图像。我想从相机获得高质量和低质量的图像这个库返回给我 Base64 图像。它有一个缩小尺寸的选项,imageQuality但我不能使用,因为我需要高质量的图像和低质量的图像let data = webcamImage.imageAsBase64;const raw = window.atob(data);const rawLength = raw.length;const unit8array = new Uint8Array(new ArrayBuffer(rawLength));for (let i = 0; i < rawLength; i++) {  unit8array[i] = raw.charCodeAt(i);}我尝试将https://www.npmjs.com/package/image-conversion应用于我们的问题,let data = webcamImage.imageAsBase64;const raw = window.atob(data);let contentType = raw.split(';')[0];const rawLength = raw.length;const unit8array = new Uint8Array(new ArrayBuffer(rawLength));for (let i = 0; i < rawLength; i++) {  unit8array[i] = raw.charCodeAt(i);}let blob = new Blob([unit8array], {type: contentType});imageProcess.compress(blob, 0.4);但这是行不通的。我想找到另一个压缩图像的解决方案
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我找到了如何用画布压缩图像


compress(webcamImage: WebcamImage, quality: number): Observable<string> {

  let _canvas = this.canvas;

  let width = webcamImage.width;

  let height = webcamImage.height;


  _canvas.width = width;

  _canvas.height = height;


  // paint snapshot image to canvas

  const img = new Image();

  img.src = webcamImage.imageAsDataUrl;

  return Observable.create(observe => {

    (img.onload = () => {

      const context2d = _canvas.getContext('2d');

      context2d.drawImage(img, 0, 0, width, height);

      // read canvas content as image

      const mimeType: string = webcamImage.mineType;

      const dataUrl: string = _canvas.toDataURL(mimeType, quality);

      observe.next(dataUrl);

    });

  });

}


查看完整回答
反对 回复 2021-08-26
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

base64 图像很可能在以 base64 编码之前已经被压缩 (jpeg)。您无法进一步压缩此类数据。

如果您需要高质量和低质量的图像,您应该从网络摄像头请求高质量(最好是原始像素)图像并将其转换为具有不同压缩参数的 jpeg 图像。

如果相机只返回jpeg数据,需要先解压再用不同的参数重新压缩,这是可能的,但会消耗更多的时间,导致质量更差。

Ngx-webcam 可能对此要求有一些限制,可能需要查看其代码并对其进行一些扩展以返回不同质量级别的捕获图像。有一个captureImageData标志可用于检索原始图像数据,但有关如何使用它的文档有点少。


查看完整回答
反对 回复 2021-08-26
  • 2 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信