当前位置:网站首页>canvas 高斯模糊效果
canvas 高斯模糊效果
2022-08-05 00:15:00 【最凶残的小海豹】
// imgData:canvas 的 getImageData 方法返回值
// radius:模糊的半径
function gaussBlur(imgData, radius) {
radius *= 3; //不知为什么,我的模糊半径是 css中 filter:bulr 值的三倍时效果才一致。
//Copy图片内容
let pixes = new Uint8ClampedArray(imgData.data);
const width = imgData.width;
const height = imgData.height;
let gaussMatrix = [],
gaussSum,
x, y,
r, g, b, a,
i, j, k,
w;
radius = Math.floor(radius);
const sigma = radius / 3;
a = 1 / (Math.sqrt(2 * Math.PI) * sigma);
b = -1 / (2 * sigma * sigma);
//生成高斯矩阵
for (i = -radius; i <= radius; i++) {
gaussMatrix.push(a * Math.exp(b * i * i));
}
//x 方向一维高斯运算
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
r = g = b = a = gaussSum = 0;
for (j = -radius; j <= radius; j++) {
k = x + j;
if (k >= 0 && k < width) {
i = (y * width + k) * 4;
w = gaussMatrix[j + radius];
r += pixes[i] * w;
g += pixes[i + 1] * w;
b += pixes[i + 2] * w;
a += pixes[i + 3] * w;
gaussSum += w;
}
}
i = (y * width + x) * 4;
//计算加权均值
imgData.data.set([r, g, b, a].map(v => v / gaussSum), i);
}
}
pixes.set(imgData.data);
//y 方向一维高斯运算
for (x = 0; x < width; x++) {
for (y = 0; y < height; y++) {
r = g = b = a = gaussSum = 0;
for (j = -radius; j <= radius; j++) {
k = y + j;
if (k >= 0 && k < height) {
i = (k * width + x) * 4;
w = gaussMatrix[j + radius];
r += pixes[i] * w;
g += pixes[i + 1] * w;
b += pixes[i + 2] * w;
a += pixes[i + 3] * w;
gaussSum += w;
}
}
i = (y * width + x) * 4;
imgData.data.set([r, g, b, a].map(v => v / gaussSum), i);
}
}
return imgData;
};
详细内容请看下文:
本文转载:https://blog.csdn.net/xuanhun521/article/details/109362541
边栏推荐
猜你喜欢

Day118. Shangyitong: order list, details, payment

2022牛客暑期多校训练营5(BCDFGHK)

电赛必备技能___定时ADC+DMA+串口通信

Getting started with 3D modeling for games, what modeling software can I choose?

Mathematical Principles of Matrix

Mysql_14 存储引擎

【云原生--Kubernetes】调度约束

简单的顺序结构程序(C语言)

Senior game modelers tell newbies, what are the necessary software for game scene modelers?

3. Actual combat---crawl the result page corresponding to Baidu's specified entry (a simple page collector)
随机推荐
【七夕情人节特效】-- canvas实现满屏爱心
MongoDB权限验证开启与mongoose数据库配置
2022年华数杯数学建模
如何写好测试用例
2 用D435i运行VINS-fusion
MongoDB permission verification is turned on and mongoose database configuration
KT148A voice chip ic working principle and internal architecture description of the chip
【无标题】线程三连鞭之“线程池”
数据类型及输入输出初探(C语言)
三大技巧让你成功入门3D建模,零基础小白必看
First, the basic concept of reptiles
Mysql_12 多表查询
"Relish Podcast" #397 The factory manager is here: How to use technology to empower the law?
测试经理要不要做测试执行?
E - Many Operations (按位考虑 + dp思想记录操作后的结果
情侣牵手[贪心 & 抽象]
.net(C#)获取两个日期间隔的年月日
golang 协程的实现原理
#yyds干货盘点#交换设备丢包严重的故障处理
元宇宙:未来我们的每一个日常行为是否都能成为赚钱工具?