对于模糊图片这个效果的实现,其实css3中的filter属性也能够实现,但是这个属性的兼容性不是很好,所以我们通常不用这种方法实现,而使用canvas配合JS实现。

  1. <span style="white-space:pre">  </span>//高斯模糊  参数说明:width:canvas对象或者是数据体对象的宽,height:canvas或者是数据体对象的高,
  2. //radius:模糊取值半径(默认为3),sigma:方差取值(默认为1)
  3. /**
  4. * [Gaussian_blur description]
  5. * @param {[type]} data   [description]
  6. * @param {[type]} width  [description]
  7. * @param {[type]} height [description]
  8. * @param {[type]} radius [description]
  9. * @param {[type]} sigma  [description]
  10. */
  11. function Gaussian_blur(data, width, height, radius, sigma) {
  12. var gaussMatrix = [],
  13. gaussSum = 0,
  14. x, y,
  15. r, g, b, a,
  16. i, j, k, len;
  17. radius = Math.floor(radius) || 3;
  18. sigma = sigma || radius / 3;
  19. a = 1 / (Math.sqrt(2 * Math.PI) * sigma);
  20. b = -1 / (2 * sigma * sigma);
  21. //生成高斯矩阵
  22. for (i = 0, x = -radius; x <= radius; x++, i++) {
  23. g = a * Math.exp(b * x * x);
  24. gaussMatrix[i] = g;
  25. gaussSum += g;
  26. }
  27. //归一化, 保证高斯矩阵的值在[0,1]之间
  28. for (i = 0, len = gaussMatrix.length; i < len; i++) {
  29. gaussMatrix[i] /= gaussSum;
  30. }
  31. //x方向
  32. for (y = 0; y < height; y++) {
  33. for (x = 0; x < width; x++) {
  34. r = g = b = a = 0;
  35. gaussSum = 0;
  36. for (j = -radius; j <= radius; j++) {
  37. k = x + j;  a=j+row;
  38. if (k >= 0 && k < width) { //确保 k 没超出 x 的范围
  39. i = (y * width + k) * 4;
  40. r += data[i] * gaussMatrix[j + radius];
  41. g += data[i + 1] * gaussMatrix[j + radius];
  42. b += data[i + 2] * gaussMatrix[j + radius];
  43. gaussSum += gaussMatrix[j + radius];
  44. }
  45. }
  46. i = (y * width + x) * 4;
  47. data[i] = r / gaussSum;
  48. data[i + 1] = g / gaussSum;
  49. data[i + 2] = b / gaussSum;
  50. }
  51. }
  52. //y方向
  53. for (x = 0; x < width; x++) {
  54. for (y = 0; y < height; y++) {
  55. r = g = b = a = 0;
  56. gaussSum = 0;
  57. for (j = -radius; j <= radius; j++) {
  58. k = y + j;
  59. if (k >= 0 && k < height) { //确保 k 没超出 y 的范围
  60. i = (k * width + x) * 4;
  61. r += data[i] * gaussMatrix[j + radius];
  62. g += data[i + 1] * gaussMatrix[j + radius];
  63. b += data[i + 2] * gaussMatrix[j + radius];
  64. gaussSum += gaussMatrix[j + radius];
  65. }
  66. }
  67. i = (y * width + x) * 4;
  68. data[i] = r / gaussSum;
  69. data[i + 1] = g / gaussSum;
  70. data[i + 2] = b / gaussSum;
  71. }
  72. }
  73. return data;
  74. }

canvas高斯模糊算法的更多相关文章

  1. .net版高斯模糊算法

    最近挺多人找高斯算法,本人贴上一个高斯模糊算法类,希望可以帮助到大家.算法的效率还是可以接受的. #region 高斯模糊算法 /// <summary> /// 高斯模糊算法 /// & ...

  2. 简单的java高斯模糊算法

    import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOEx ...

  3. SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。

    这里的高斯模糊采用的是论文<Recursive implementation of the Gaussian filter>里描述的递归算法. 仔细观察和理解上述公式,在forward过程 ...

  4. 高斯模糊算法的 C++ 实现

    2008 年在一个 PS 讨论群里,有网友不解 Photoshop 的高斯模糊中的半径是什么含义,因此当时我写了这篇文章: 对Photoshop高斯模糊滤镜的算法总结: 在那篇文章中,主要讲解了高斯模 ...

  5. 传统高斯模糊与优化算法(附完整C++代码)

    高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop.GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪声以及降低细节层次 ...

  6. webgl智慧楼宇发光效果算法系列之高斯模糊

    webgl智慧楼宇发光效果算法系列之高斯模糊 如果使用过PS之类的图像处理软件,相信对于模糊滤镜不会陌生,图像处理软件提供了众多的模糊算法.高斯模糊是其中的一种. 在我们的智慧楼宇的项目中,要求对楼宇 ...

  7. HTML5 实现图像模糊算法

    做个广告,WEB/PHP/JQ/HTML5/MYSQL/QQ群6848027 项目中需要用到HTML5模糊图像,以前用GDI,GDI+中都有现成的组件来实现,HTML5中如何实现? createIma ...

  8. Android高斯模糊

    传送门 github地址:http://developer.android.com/guide/topics/renderscript/compute.html: https://github.com ...

  9. Android开发学习之路-动态高斯模糊怎么做

    什么是高斯模糊? 高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop.GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪 ...

随机推荐

  1. Spark运行时错误与解决

    Spark  java.io.IOException: Filesystem closed partition数量太小,读取数据后进行repartition重新分片再处理. Spark Streami ...

  2. 【转】js 获取浏览器高度和宽度值(多浏览器

    原文地址:http://www.jb51.net/article/19844.htm js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ...

  3. 【数据库摘要】10_Sql_Create_Index

    CREATE INDEX 语句 CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下.索引使数据库应用程序能够更快地查找数据. 索引 您能够在表中创建索引,以便更加高速高效地查询 ...

  4. 【SQL】MaxComputer中调试与问题排查技巧小结

    1.分段调试 面对长的SQL,出错时一般直接看定位的行号,有时候不出错但是没数据时,应该尝试分段调试,很长的SQL嵌套很多的子查询时,一个一个子查询进行分别调试,看哪一步子查询出了问题,层层推进 2. ...

  5. Java8中的HashMap分析

    本篇文章是网上多篇文章的精华的总结,结合自己看源代码的一些感悟,其中线程安全性和性能测试部分并未做实践测试,直接是“拿来”网上的博客的. 哈希表概述 哈希表本质上一个数组,数组中每一个元素称为一个箱子 ...

  6. Luogu P2568 GCD

    我们首先发现这样肯定是做不了的,所以我们枚举为\(gcd(x,y)=d\)的\(d\) 然后考虑以下的性质: \(gcd(x,y)=1 \Leftrightarrow gcd(px,py)=p(p为素 ...

  7. CF 958E2. Guard Duty (medium)

    这道题是昨天linkfqy dalao上课讲的一道题 当时他讲的时候就想到了一种玄学的搞法,然后不敢相信自己切掉了 没想到后来CHJ dalao也想到了这种算法,然后发现是对的 后来10min就切掉了 ...

  8. Tensorflow实例:利用LSTM预测股票每日最高价(一)

    RNN与LSTM 这一部分主要涉及循环神经网络的理论,讲的可能会比较简略. 什么是RNN RNN全称循环神经网络(Recurrent Neural Networks),是用来处理序列数据的.在传统的神 ...

  9. .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

    前言 上篇<.net core实践系列之短信服务-架构设计>介绍了我对短信服务的架构设计,同时针对场景解析了我的设计理念.本篇继续讲解Api服务的实现过程. 源码地址:https://gi ...

  10. (9)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- JWT算法

    一. JWT 简介 内部 Restful 接口可以“我家大门常打开”,但是如果要给 app 等使用的接口,则需要做权限校验,不能谁都随便调用. Restful 接口不是 web 网站,App 中很难直 ...