Skip to content

图像处理

基于 canvas 的图像处理工具。每个变换返回的是离屏 canvas 而不是 dataURL,这样多个变换可以串起来,不必每步都编码解码一次 PNG。

使用

ts
import { getImage, cutRound, opacity } from 'ranuts/utils';

const img = await getImage('/avatar.png');
const rounded = cutRound(img, 24);
const faded = opacity(rounded, 0.5);
document.body.appendChild(faded as HTMLCanvasElement);

API

getImage

按路径加载图片,解码完成后 resolve。

参数

参数说明类型默认值
src图片路径string必填

返回

参数说明类型
promise加载好的图片元素Promise<ImgSource>

TIP

reject 出去的是原始的 error 事件而非 Error 对象。<img>onerror 拿不到失败原因 —— 跨域时浏览器刻意不透露 —— 包装成 Error 只会造出一条假的错误信息。

cutRound

把图片裁成圆角。

参数

参数说明类型默认值
img待裁剪的图片ImgSource必填
radius圆角半径number必填

返回

参数说明类型
canvas离屏 canvasImgSource

opacity

给图片整体叠加透明度。

优先走 ctx.filter(GPU 加速);浏览器不支持时降级为逐像素改写 alpha 通道。降级路径会跳过 alpha 已经是 0 的像素,避免把完全透明的区域算出非零值。

参数

参数说明类型默认值
img待处理的图片ImgSource必填
opacity透明度,0 – 1number必填

返回

参数说明类型
canvas离屏 canvasImgSource

getMatrix

生成二维高斯权重矩阵,权重之和归一化为 1

归一化是必须的:不归一化时卷积会整体改变图像亮度。sigma 默认取 radius / 3,这样高斯曲线在半径处已衰减到接近 0,截断带来的误差可以忽略。

参数

参数说明类型默认值
radius模糊半径number必填
sigma标准差numberradius / 3

返回

参数说明类型
matrix长度 (2r+1)² 的一维矩阵,行优先,和为 1number[]

类型

ts
type ImgSource = HTMLImageElement | HTMLCanvasElement;

相关

Released under the MIT License.