2 回答
![?](http://img1.sycdn.imooc.com/545863f50001df1702200220-100-100.jpg)
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);
});
});
}
![?](http://img1.sycdn.imooc.com/5923e28b0001bb7201000100-100-100.jpg)
TA贡献1725条经验 获得超7个赞
base64 图像很可能在以 base64 编码之前已经被压缩 (jpeg)。您无法进一步压缩此类数据。
如果您需要高质量和低质量的图像,您应该从网络摄像头请求高质量(最好是原始像素)图像并将其转换为具有不同压缩参数的 jpeg 图像。
如果相机只返回jpeg数据,需要先解压再用不同的参数重新压缩,这是可能的,但会消耗更多的时间,导致质量更差。
Ngx-webcam 可能对此要求有一些限制,可能需要查看其代码并对其进行一些扩展以返回不同质量级别的捕获图像。有一个captureImageData
标志可用于检索原始图像数据,但有关如何使用它的文档有点少。
添加回答
举报