Canvas實現毛玻璃效果解決方式1:使用stackblur.js
在Android系統中實現圖片的毛玻璃效果比較好用的類庫是:Android StackBlur
官方Git地址:https://github.com/kikoso/android-stackblur
在前端Canvas中可以使用StackBlur.js:
Git地址:https://github.com/flozz/StackBlur
簡單API說明:
API 調用
下面是針對不同的源(圖片或者 Canvas 等)進行 StackBlur 的調用。
圖像作為源:
StackBlur.image(sourceImage, targetCanvas, radius, blurAlphaChannel);
- sourceImage:HTMLImageElement或者它的id
- targetCanvas:HTMLCanvasElement或者它的id
- radius:模糊半徑
- blurAlphaChannel: 如果你想模糊一個 RGBA 的圖像,就將其設置為true(可選,默認 =false)
RGBA Canvas 作為源:
StackBlur.canvasRGBA(targetCanvas, top_x, top_y, width, height, radius);
- targetCanvas:HTMLCanvasElement
- top_x: 要模糊的矩形的左上角的水平坐標
- top_y: 要模糊的矩形的左上角的垂直坐標
- width: 要模糊的矩形寬度
- height: 要模糊的矩形高度
- radius: 模糊半徑
RGB Canvas 作為源:
StackBlur.canvasRGB(targetCanvas, top_x, top_y, width, height, radius);
- targetCanvas:HTMLCanvasElement
- top_x: 要模糊的矩形的左上角的水平坐標
- top_y: 要模糊的矩形的左上角的垂直坐標
- width: 要模糊的矩形寬度
- height:要模糊的矩形高度
- radius: 模糊半徑
RGBA ImageData 作為源:
StackBlur.imageDataRGBA(imageData, top_x, top_y, width, height, radius);
- imageData: canvas 的ImageData
- top_x:要模糊的矩形的左上角的水平坐標
- top_y: 要模糊的矩形的左上角的垂直坐標
- width: 要模糊的矩形寬度
- height: 要模糊的矩形高度
- radius: 模糊半徑
RGB ImageData 作為源:
StackBlur.imageDataRGB(imageData, top_x, top_y, width, height, radius);
- imageData: canvas 的ImageData
- top_x:要模糊的矩形的左上角的水平坐標
- top_y: 要模糊的矩形的左上角的垂直坐標
- width: 要模糊的矩形寬度
- height: 要模糊的矩形高度
- radius: 模糊半徑
實例1:
<!--使用Canvas加載圖片--> <canvas id="canvas1" width="300" height="200"></canvas> <br /><br /> <img id="img1" src="../Images/mm1.jpg" /> <script> var img1 = document.getElementById('img1'); img1.onload = function () { //調用模糊處理 StackBlur.image('img1', 'canvas1', 100, true); } </script>
實例2:相對完整點
1.添加引用
<link href="//cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <link href="//cdn.bootcss.com/bootstrap-slider/9.4.1/css/bootstrap-slider.css" rel="stylesheet"> <script src="//cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script src="//cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="//cdn.bootcss.com/bootstrap-slider/9.4.1/bootstrap-slider.min.js"></script> <script src="../Js/stackblur.js"></script>
2.HTM和js
<!--使用Canvas加載圖片--> <canvas id="canvas1" width="300" height="200"></canvas> <br /><br /> <img id="img1" src="../Images/mm1.jpg" /> <br /> <style> #ex1Slider .slider-selection { background: #BABABA; } </style> <input id="ex1" data-slider-id="ex1Slider" type="text" data-slider-min="0" data-slider-max="100" data-slider-step="1" data-slider-value="100" /> <script> var img1 = document.getElementById('img1'); img1.onload = function () { //調用模糊處理 StackBlur.image('img1', 'canvas1', 100, true); } //滑動控件 $('#ex1').slider().on('change', function (e) { var newValue = e.value.newValue; //調用模糊處理 StackBlur.image('img1', 'canvas1', newValue, true); }); </script>