摘要:给图像设置一个阴影效果。一值设定图像会被调整的色环角度值。的价值是完全反转。超过的值是允许的,则有更高的饱和度。值为则完全是深褐色的,值为图像无变化。
效果预览 思路
其实非常非常赶单~
CSS3多了一个filter的属性,非常强大(兼容性一般)!
我们只要根据输入的值/滑块滑动的值来动态更改css中filter属性的值即可
none 默认值,没有效果。
blur(px) 给图像设置高斯模糊。"radius"一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊;不接受百分比值。
brightness(%) 给图片应用一种线性乘法,使其看起来更亮或更暗。如果值是0%,图像会全黑。值是100%,则图像无变化。其他的值对应线性乘数效果。值超过100%也是可以的,图像会比原来更亮。如果没有设定值,默认是1。
contrast(%) 调整图像的对比度。值是0%的话,图像会全黑。值是100%,图像不变。值可以超过100%,意味着会运用更低的对比。若没有设置值,默认是1。
drop-shadow(h-shadow v-shadow blur spread color) 给图像设置一个阴影效果。阴影是合成在图像下面,可以有模糊度的,可以以特定颜色画出的遮罩图的偏移版本。 函数接受
grayscale(%) 将图像转换为灰度图像。值定义转换的比例。值为100%则完全转为灰度图像,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0;
hue-rotate(deg) 图像应用色相旋转。"angle"一值设定图像会被调整的色环角度值。值为0deg,则图像无变化。若值未设置,默认值是0deg。该值虽然没有最大值,超过360deg的值相当于又绕一圈。
invert(%) 反转输入图像。值定义转换的比例。100%的价值是完全反转。值为0%则图像无变化。值在0%和100%之间,则是效果的线性乘子。 若值未设置,值默认是0。
opacity(%) 转化图像的透明程度。值定义转换的比例。值为0%则是完全透明,值为100%则图像无变化。值在0%和100%之间,则是效果的线性乘子,也相当于图像样本乘以数量。 若值未设置,值默认是1。该函数与已有的opacity属性很相似,不同之处在于通过filter,一些浏览器为了提升性能会提供硬件加速。
saturate(%) 转换图像饱和度。值定义转换的比例。值为0%则是完全不饱和,值为100%则图像无变化。其他值,则是效果的线性乘子。超过100%的值是允许的,则有更高的饱和度。 若值未设置,值默认是1。
sepia(%) 将图像转换为深褐色。值定义转换的比例。值为100%则完全是深褐色的,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0;
url() URL函数接受一个XML文件,该文件设置了 一个SVG滤镜,且可以包含一个锚点来指定一个具体的滤镜元素。
使用直接就这样
img {
-webkit-filter: contrast(200%); /* Chrome, Safari, Opera */
filter: contrast(200%) opacity(0.5) //要多少属性加多少;
}
开始操作
写一个过滤属性滑块和输入框,互相绑定值,如果用vue就简单了hhh
//html
//js
//注册过滤器
function filter(type) {
//获取滤镜类型关联的dom节点
//绑定change事件,还有回车按键事件
let ele = document.getElementById(type);
let ele_val = document.getElementById(type + "-val");
//输入框输入值按下回车,把值更新到滑块上
ele_val.addEventListener("keyup",function(e){
if(e.keyCode == 13){
ele.value = ele_val.value;
//同时更新滤镜效果
setCss(type, ele_val.value);
}
})
//滑块滑动的时候,把值更新在右边的输入框中
ele.addEventListener("change", function() {
ele_val.value = ele.value;
//同时更新滤镜效果
setCss(type, ele_val.value);
});
}
写一个文件选择,预览图片
//html
//选择文件
function fileSelect() {
let img = document.getElementById("img");
document.getElementById("file").onchange = function() {
var reader = new FileReader();
reader.onload = function(e) {
img.src = e.target.result;
}
reader.readAsDataURL(this.files[0]);
}
}
写一个根据输入值更新CSS的方法
//更新css属性
function setCss(type, val) {
let img = document.getElementById("img");
//已经存在某个滤镜,更改滤镜数值
if (img.style.filter.indexOf(type) > -1) {
//利用正则则出滤镜名称更改其值
let reg = new RegExp("(?<=" + type + ")" + "(.*)", "g")
img.style.filter = img.style.filter.replace(reg, function(match) { return `(${val/100})` });
} else {
//直接添加新滤镜
img.style.filter += `${type}(${val/100})`
}
}
注意
由于这个demo只是随便写写,只是前几天用到这个filter属性感觉有点厉害,就拿来玩玩,文中的代码写得很丑,也没什么规范,只适用于‘写来玩玩’的范畴,一些输入验证,节流,参数的规范都没有做,见谅。
本来还打算做一个导出使用滤镜后的照片的,用的html2canvas来截图导出,然后发现,它不支持!!!不支持这个css属性!!截出来的图是原图!这可是真的难受啊马飞,现在还没有解决方案,如果有大佬知道如何保存使用滤镜后的图片到本地的,请在评论区留下您的想法,非常感谢!
辣鸡源码
photoshop-web
- //选择文件
- function fileSelect() {
- let img = document.getElementById("img");
- document.getElementById("file").onchange = function() {
- var reader = new FileReader();
- reader.onload = function(e) {
- img.src = e.target.result;
- }
- reader.readAsDataURL(this.files[0]);
- }
- }
- //重置效果
- function reset() {
- let reset_btn = document.getElementById("reset");
- let val_boxes = document.getElementsByClassName("val-box");
- let val_arr = Array.prototype.slice.call(val_boxes);
- let img = document.getElementById("img");
- reset_btn.addEventListener("click", function() {
- //所有的数据输入重置为空
- val_arr.forEach(function(item) {
- item.value = "";
- });
- //去掉图片的css属性
- img.style.filter = "";
- })
- }
- //注册过滤器
- function filter(type) {
- //获取滤镜类型关联的dom节点
- //绑定change事件
- //更改右侧输入框的显示的值,以及更新滤镜效果
- let ele = document.getElementById(type);
- let ele_val = document.getElementById(type + "-val");
- ele_val.addEventListener("keyup",function(e){
- if(e.keyCode == 13){
- ele.value = ele_val.value;
- setCss(type, ele_val.value);
- }
- })
- ele.addEventListener("change", function() {
- ele_val.value = ele.value;
- setCss(type, ele_val.value);
- });
- }
- //更新css属性
- function setCss(type, val) {
- let img = document.getElementById("img");
- //已经存在某个滤镜,更改滤镜数值
- if (img.style.filter.indexOf(type) > -1) {
- let reg = new RegExp("(?<=" + type + ")" + "(.*)", "g")
- img.style.filter = img.style.filter.replace(reg, function(match) { return `(${val/100})` });
- } else {
- //直接添加新滤镜
- img.style.filter += `${type}(${val/100})`
- }
- }
- window.onload = function() {
- //亮度
- filter("brightness");
- //对比度
- filter("contrast");
- //灰度
- filter("grayscale");
- //饱和度
- filter("saturate");
- //透明度
- filter("opacity");
- //反相
- filter("invert");
- //注册重置
- reset();
- //注册文件选择
- fileSelect();
- }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/102579.html
摘要:给图像设置一个阴影效果。一值设定图像会被调整的色环角度值。的价值是完全反转。超过的值是允许的,则有更高的饱和度。值为则完全是深褐色的,值为图像无变化。 效果预览 showImg(https://segmentfault.com/img/bVbpSTz?w=648&h=729); 思路 其实非常非常赶单~CSS3多了一个filter的属性,非常强大(兼容性一般)!我们只要根据输入的值/滑...
摘要:前言说到对图片进行处理,我们经常会想到这类的图像处理工具。或者是的时候,对图片的对比度,阴影进行处理。过滤器通常被用于调整图片,背景和边界的渲染。最后,安利我们的公众号前端指南。 前言 说到对图片进行处理,我们经常会想到PhotoShop这类的图像处理工具。作为前端开发者,我们经常会需要处理一些特效,例如根据不同的状态,让图标显示不同的颜色。或者是hover的时候,对图片的对比度,阴影...
摘要:前言说到对图片进行处理,我们经常会想到这类的图像处理工具。或者是的时候,对图片的对比度,阴影进行处理。过滤器通常被用于调整图片,背景和边界的渲染。最后,安利我们的公众号前端指南。 前言 说到对图片进行处理,我们经常会想到PhotoShop这类的图像处理工具。作为前端开发者,我们经常会需要处理一些特效,例如根据不同的状态,让图标显示不同的颜色。或者是hover的时候,对图片的对比度,阴影...
摘要:属性特性描述可选值,布尔值,默认值为,启用过滤器为不启用过滤器。正常显示,内容对象将翻过来。,设置对象是否投影,布尔值,和,设置对象投影不透明度,,假如为那么该值无效。 前言 前段时间在做一个专题的时候用到了opacity不透明度属性,因为设计图上是半透明背景,白色文字 showImg(https://segmentfault.com/img/bVknaX); 所以在IE用到了其...
摘要:简单来说,滤镜就是提供类似的图形特效,像模糊,锐化或元素变色等功能。常用用法既然是标题是你所不知道的技巧与细节,那么比较常用的一些用法就不再赘述,通常我们见得比较多的滤镜用法有使用生成毛玻璃效果使用生成整体阴影效果使用生成透明度本文主要介绍 CSS 滤镜的不常用用法,希望能给读者带来一些干货! 注意:ie不兼容 本文所描述的滤镜,指的是 CSS3 出来后的滤镜,不是 IE 系列时代的滤镜,话...
阅读 799·2021-10-27 14:15
阅读 1268·2021-10-15 09:42
阅读 2806·2019-08-30 15:53
阅读 1344·2019-08-23 17:02
阅读 3048·2019-08-23 16:23
阅读 3273·2019-08-23 15:57
阅读 3546·2019-08-23 14:39
阅读 581·2019-08-23 14:35