“这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战”
锐化效果的实现
我的需求是实现视频透明度、亮度、对比度,饱和度、模糊、锐化等效果的预览,然后传递对应的参数给后端。发现除了锐化,其他功能css filter都要对应的效果。
关于锐化google了很久,最终找到了实现方案:
即,使用svg写一个锐化的滤镜,作为一个遮罩层,然后应用到对应的元素上,代码如下:
<div>
<img id="sample-image"
src="https://images.westend61.de/0000859335pw/close-up-of-full-shopping-cart-in-grocery-store-CAIF15555.jpg">
</div>
<svg>
<defs>
<filter id="unsharpy">
<feGaussianBlur result="blurOut" in="SourceGraphic" stdDeviation="5"/>
<feComposite operator="arithmetic" k1="0" k2="1.3" k3="-0.3" k4="0"
in="SourceGraphic" in2="blurOut" />
</filter>
</defs>
</svg>
div {
filter: url(#unsharpy);
}
#sample-image {
margin-left: 50px;
width: 600px;
height: 400px;
}
锐化程度的调整通过修改stdDeviation来改变,当前是5,越大,锐化程度越高
其中,svg的部分也可以使用一个矩阵来表达
<div>
<img id="sample-image"
src="https://images.westend61.de/0000859335pw/close-up-of-full-shopping-cart-in-grocery-store-CAIF15555.jpg">
</div>
<svg>
<defs>
<filter id="sharpy">
<feConvolveMatrix order="3" kernelMatrix="0 -1 0 -1 5 -1 0 -1 0"/>
</filter>
</defs>
</svg>
div {
filter: url(#sharpy);
}
#sample-image {
margin-left: 50px;
width: 600px;
height: 400px;
}
锐化程度,可以通过调整矩阵值实现,修改下面圈出来的值
feConvolveMatrix的原理如下:developer.mozilla.org/zh-CN/docs/…
CSS滤镜参考
| 滤镜 | 释义 |
|---|---|
| filter:blur(5px) | 模糊 |
| filter:brightness(1.4) | 亮度 |
| filter:contrast(200%) | 对比度 |
| filter:drop-shadow(4px 4px 8px blue) | 投影 |
| filter:grayscale(50%) | 灰度 |
| filter:hue-rotate(90deg) | 色调变化 |
| filter:invert(75%) | 反相 |
| filter:opacity(25%) | 透明度 |
| filter:saturate(230%) | 饱和度 |
| filter:sepia(60%) | 褐色 |
这些滤镜可以组合在使用,举个栗子
filter: contrast(175%) brightness(3%);
更多学习资源
其实CSS滤镜以及SVG滤镜可以实现更多更炫酷的效果,可以看一下下面这篇文章,你会对滤镜在工作的应用有更多的思考。 www.zhangxinxu.com/wordpress/2…
突然发现,前端很多冷门的知识在工作中都有可能用得到,生命不止,奋斗不息吧!