生活随笔
收集整理的這篇文章主要介紹了
canvas高斯模糊算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于模糊圖片這個效果的實現,其實css3中的filter屬性也能夠實現,但是這個屬性的兼容性不是很好,所以我們通常不用這種方法實現,而使用canvas配合JS實現。
<span?style="white-space:pre">??</span>????????????function?Gaussian_blur(data,?width,?height,?radius,?sigma)?{??????????var?gaussMatrix?=?[],??????????????gaussSum?=?0,??????????????x,?y,??????????????r,?g,?b,?a,??????????????i,?j,?k,?len;????????????radius?=?Math.floor(radius)?||?3;??????????sigma?=?sigma?||?radius?/?3;????????????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;????????????}????????????????????for?(i?=?0,?len?=?gaussMatrix.length;?i?<?len;?i++)?{??????????????gaussMatrix[i]?/=?gaussSum;??????????}????????????????????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;??a=j+row;??????????????????????if?(k?>=?0?&&?k?<?width)?{???????????????????????????i?=?(y?*?width?+?k)?*?4;??????????????????????????r?+=?data[i]?*?gaussMatrix[j?+?radius];??????????????????????????g?+=?data[i?+?1]?*?gaussMatrix[j?+?radius];??????????????????????????b?+=?data[i?+?2]?*?gaussMatrix[j?+?radius];??????????????????????????gaussSum?+=?gaussMatrix[j?+?radius];??????????????????????}??????????????????}??????????????????i?=?(y?*?width?+?x)?*?4;????????????????????data[i]?=?r?/?gaussSum;??????????????????data[i?+?1]?=?g?/?gaussSum;??????????????????data[i?+?2]?=?b?/?gaussSum;??????????????}??????????}??????????????????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)?{?????????????????????????i?=?(k?*?width?+?x)?*?4;??????????????????????????r?+=?data[i]?*?gaussMatrix[j?+?radius];??????????????????????????g?+=?data[i?+?1]?*?gaussMatrix[j?+?radius];??????????????????????????b?+=?data[i?+?2]?*?gaussMatrix[j?+?radius];??????????????????????????gaussSum?+=?gaussMatrix[j?+?radius];??????????????????????}??????????????????}??????????????????i?=?(y?*?width?+?x)?*?4;??????????????????data[i]?=?r?/?gaussSum;??????????????????data[i?+?1]?=?g?/?gaussSum;??????????????????data[i?+?2]?=?b?/?gaussSum;????????????????}??????????}????????????return?data;??????}?? ?
轉載于:https://www.cnblogs.com/ckAng/p/9334216.html
總結
以上是生活随笔為你收集整理的canvas高斯模糊算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。