canvas实现高斯模糊
来源:互联网 发布:服务贸易进出口数据库 编辑:程序博客网 时间:2024/05/29 07:46
对于模糊图片这个效果的实现,其实css3中的filter属性也能够实现,但是这个属性的兼容性不是很好,所以我们通常不用这种方法实现,而使用canvas配合JS实现。
高斯模糊
就是按照高斯曲线对图片进行模糊处理,所谓”模糊”,可以理解成每个像素都取周边像素的平均值,这样的话就会是图片像素值处于一种“平滑化”,产生模糊的效果。
局部模糊效果图
gauss.js代码
function gaussBlur(imgData) { var pixes = imgData.data; var width = imgData.width; var height = imgData.height; var gaussMatrix = [], gaussSum = 0, x, y, r, g, b, a, i, j, k, len; var radius = 10; var sigma = 5; a = 1 / (Math.sqrt(2 * Math.PI) * sigma); b = -1 / (2 * sigma * sigma); //生成高斯矩阵 for (i = 0, x = -radius; x <= radius; x++, i++){ g = a * Math.exp(b * x * x); gaussMatrix[i] = g; gaussSum += g; } //归一化, 保证高斯矩阵的值在[0,1]之间 for (i = 0, len = gaussMatrix.length; i < len; i++) { gaussMatrix[i] /= gaussSum; } //x 方向一维高斯运算 for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { r = g = b = a = 0; gaussSum = 0; for(j = -radius; j <= radius; j++){ k = x + j; if(k >= 0 && k < width){//确保 k 没超出 x 的范围 //r,g,b,a 四个一组 i = (y * width + k) * 4; r += pixes[i] * gaussMatrix[j + radius]; g += pixes[i + 1] * gaussMatrix[j + radius]; b += pixes[i + 2] * gaussMatrix[j + radius]; // a += pixes[i + 3] * gaussMatrix[j]; gaussSum += gaussMatrix[j + radius]; } } i = (y * width + x) * 4; // 除以 gaussSum 是为了消除处于边缘的像素, 高斯运算不足的问题 // console.log(gaussSum) pixes[i] = r / gaussSum; pixes[i + 1] = g / gaussSum; pixes[i + 2] = b / gaussSum; // pixes[i + 3] = a ; } } //y 方向一维高斯运算 for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { r = g = b = a = 0; gaussSum = 0; for(j = -radius; j <= radius; j++){ k = y + j; if(k >= 0 && k < height){//确保 k 没超出 y 的范围 i = (k * width + x) * 4; r += pixes[i] * gaussMatrix[j + radius]; g += pixes[i + 1] * gaussMatrix[j + radius]; b += pixes[i + 2] * gaussMatrix[j + radius]; // a += pixes[i + 3] * gaussMatrix[j]; gaussSum += gaussMatrix[j + radius]; } } i = (y * width + x) * 4; pixes[i] = r / gaussSum; pixes[i + 1] = g / gaussSum; pixes[i + 2] = b / gaussSum; } } return imgData;}
index.html代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style> canvas { border: 1px solid black; } img { display: none; } </style></head><body> <img src="1.jpg" id="img"> <canvas width="450" height="300" id="canvas"></canvas> <script src="gauss.js"></script> <script> var img = document.getElementById('img'); var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); img.onload = function () { ctx.drawImage(img, 0, 0, 450, 300); var data = ctx.getImageData(225, 0, 450, 300); var emptyData = ctx.createImageData(225, 300); emptyData = gaussBlur(data); ctx.putImageData(emptyData, 225, 0); } </script></body></html>
1 1
- canvas实现高斯模糊
- 实现高斯模糊
- canvas像素级操作实现各种滤镜之高斯模糊
- canvas像素级操作实现各种滤镜之高斯模糊
- 实现图片模糊,高斯模糊
- 高斯模糊实现小结
- 高斯模糊实现小结
- opencv实现高斯模糊
- 高斯模糊实现小结
- 高斯模糊实现小结
- 高斯模糊实现小结
- 高斯模糊及实现
- opencv实现高斯模糊
- iOS高斯模糊实现
- 高斯模糊的实现
- Android实现高斯模糊
- android 高斯模糊实现
- 高斯模糊实现小结
- 接口
- jdbc的编程步骤
- Android第一天
- jQuery实现Checkbox中项目开发全选全不选的使用
- 在登录Linux时要执行文件的过程(可设置开机启动)
- canvas实现高斯模糊
- 多态
- sql server 、oracle、mysql的区别
- PLSQL配置
- nginx学习文档之三 nginx常用命令
- 配置环境变量
- 卷积神经网络(CNN)反向传播算法公式详细推导
- Javascript实现计数器,定时警告和停止
- [深入理解Android卷二 全文-第四章]深入理解PackageManagerService