CSS、JS、PHP将图片模糊(毛玻璃)效果
收藏一个模糊图片效果的css+js。虽然能兼容各种浏览器,但是这种方法得出来的效果不太理想。
例如:
1、各个浏览器兼容情况不统一,模糊效果也不统一,处理效率也不统一。
2、图片模糊后四周缩小或扩散,而且不能局部控制图片。
3、模糊图片需要消耗性能。模糊图片不能过多。部分手机用户滑动页面会卡顿,机器发热。
不过,虽然有缺点但是还是很好用。
1、使用CSS
CSS:
.blur{ filter: url(blur.svg#blur);/* FireFox, Chrome, Opera */ -webkit-filter: blur(10px);/* Chrome, Opera */ -moz-filter: blur(10px); -ms-filter: blur(10px); filter: blur(10px); filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=10, MakeShadow=false);/* IE6~IE9 */ }
HTML:
<table border="1px"> <tr> <td><p>原图<p><img src="1.jpg" /></td> <td><p>使用CSS<p><img src="1.jpg" class="blur"/></td> </tr> </table>
SVG:
<?xml version="1.0" standalOne="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg"> <filter id="blur"> <feGaussianBlur stdDeviation="10" /> </filter> </svg>
以上代码除了 ie10和ie11不兼容外,其他各大主流浏览器都能兼容。
2、使用JS
StackBlur.js 是 Mario Klingemann 创建的一个快速的、接近高斯模糊的效果库。
StackBlur例子:http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html
HTML:
<table border="1px"> <tr> <td><p>原图<p><img src="1.jpg" id="blur" Onload="blurImage()"/></td> <td><p>使用JS<p><canvas id="canvas"></canvas></td> </tr> </table>
JS:
function blurImage(){ try{ stackBlurImage('blur','canvas',10,false); }catch(e){ alert("浏览器不支持JS Blur"); } }
以上代码 Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari 等都支持
注意:不要直接在本地用浏览器打开测试或图片没加载完成就调用函数,部分浏览器会报错:Cannot access local image。
第1、2参考自:http://www.zhangxinxu.com/wordpress/2013/11/css-svg-image-blur/
除了以上2种方法外,你还可以在后端程序处理生成模糊图片后,在前端直接显示,兼容性完胜,效率完胜。不过处理模糊需要消耗服务器性能,php imagick 可以简单调用高斯模糊,处理效率还算可以,起码比内置的GD库效果好很多效率快。但是如果使用服务器频繁处理模糊图片的话,显然不合理。
3、使用PHP
header('Content-type: image/jpeg'); $image = new Imagick('1.jpg'); $image->blurImage(5,5); echo $image;
header('Content-type: image/jpeg'); $imagick = new Imagick('1.jpg'); $imagick->gaussianBlurImage(5, 5); echo $imagick->getImageBlob();
还可以使用Grafika库
是用composer的朋友可以直接运行
composer require kosinix/grafika:dev-master --prefer-dist
或者直接到官网下载
https://kosinix.github.io/grafika/
require_once 'grafika/src/autoloader.php'; use Grafika\Grafika; header('Content-type: image/jpeg'); $editor = Grafika::createEditor(); $editor->open($image, '1.jpg'); $filter = Grafika::createFilter('Blur', 10); $editor->apply($image, $filter); //$editor->save($image, '1_blur.jpg'); echo $image->getCore();
4、例子
例子一:测试
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cOntent="text/html; charset=utf-8" /> <title>例子一:测试</title> <style> table td{padding:0 20px;} .blur{ filter: url(blur.svg#blur);/* FireFox, Chrome, Opera */ -webkit-filter: blur(10px);/* Chrome, Opera */ -moz-filter: blur(10px); -ms-filter: blur(10px); filter: blur(10px); filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=10, MakeShadow=false);/* IE6~IE9 */ } </style> <script src='StackBlur.js'></script> <script> function blurImage(){ try{ stackBlurImage('blur','canvas',10,false); }catch(e){ alert("浏览器不支持JS Blur"); } } </script> </head> <body> <table border="1px"> <tr> <td><p>原图<p><img src="1.jpg" id="blur" Onload="blurImage()"/></td> <td><p>使用CSS<p><img src="1.jpg" class="blur"/></td> <td><p>使用JS<p><canvas id="canvas"></canvas></td> </tr> </table> </body> </html>
看下图,对比各个浏览器的处理效果和兼容性。
模糊效果、差异、区别、边界,自己好好看上例图,体会下、感受下和发散思维下。
例子二:综合
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cOntent="text/html; charset=utf-8" /> <title>例子二:综合</title> <style> .blur { filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=10, MakeShadow=false); /* IE6~IE9 */ } :root .blur { display: none; /* IE9+, Firefox, Chrome, Opera : hidden */ filter: none; /* NO IE9 */ } </style> <script src='StackBlur.js'></script> <script> function blurImage(){ try{ stackBlurImage('blur','canvas',10,false); }catch(e){ } } </script> </head> <body> <img src="1.jpg" id="blur" class="blur" Onload="blurImage()"/> <canvas id="canvas"></canvas> </body> </html>
例子三:后端PHP处理
<?php /** * Created by PhpStorm. * User: cxq * Date: 2017-11-30 * Time: 22:37 */ //header('Content-type: image/jpeg'); //$image = new Imagick('1.jpg'); //$image->blurImage(5,5); //echo $image; //header('Content-type: image/jpeg'); //$imagick = new Imagick('1.jpg'); //$imagick->gaussianBlurImage(5, 5); //echo $imagick->getImageBlob(); require_once 'grafika/src/autoloader.php'; use Grafika\Grafika; header('Content-type: image/jpeg'); $editor = Grafika::createEditor(); $editor->open($image, '1.jpg'); $filter = Grafika::createFilter('Blur', 10); $editor->apply($image, $filter); //$editor->save($image, '1_blur.jpg'); echo $image->getCore();
统一效果 :
已下载:504 次
原创文章,转载请注明出处:https://www.weizhixi.com/article/10.html