服务端阅读 02026年5月30日 00:10
Canvas 如何进行图像处理和像素操作?
Canvas 图像处理就是四步:drawImage 把图片、视频帧或另一个 Canvas 画上去;getImageData 读出像素;修改 data 里的 RGBA;再用 putImageData 写回。data 是 Uint8ClampedArray,每个像素 4 个值,位置从 i * 4 开始。九参数 drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh) 可同时裁剪和缩放,雪碧图截帧、头像裁剪常用。跨域图必须服务端开 CORS,并给图片设置 crossOrigin="anonymous",否则读像素会抛 SecurityError。追问Canvas 橡皮擦怎么做?把 globalCompositeOperation 设成 destination-out,新画的区域会从旧内容里挖掉。蒙版常用 source-in,发光叠加可用 lighter。灰度滤镜为什么不用 RGB 平均值?人眼对绿色更敏感,常用 0.299R + 0.587G + 0.114B 算亮度,视觉效果比简单平均自然。大图逐像素处理很卡怎么办?用 OffscreenCanvas + Worker,把像素循环放到子线程;静态图层先离屏缓存;只改局部时用 putImageData 的脏矩形参数,别全画布回写。处理后的图片怎么导出?推荐 canvas.toBlob(cb, "image/jpeg", 0.92),异步且省内存。toDataURL() 同步生成 Base64,只适合小图预览。写段代码function grayscale(imageData) { const d = imageData.data; for (let i = 0; i < d.length; i += 4) { const gray = d[i] * 0.299 + d[i + 1] * 0.587 + d[i + 2] * 0.114; d[i] = d[i + 1] = d[i + 2] = gray; } return imageData;}