当前位置: 首页 > 科技观察

JS封装cavans(各种滤镜组件)

时间:2023-03-14 21:24:39 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com前言图片加工现在已经成为我们生活中的刚需,想必每个人都经常有这种需求。在实际的前端业务中,往往有很多项目需要进行图像处理和处理。本文基于javascript,使用html5+cavans实现多种常用滤镜效果,并封装成可调用的js文件(filter.js),支持图片本地存储。效果展示及实现思路我们知道,每张图片都是由若干个像素点组成的,得到的像素点是一个数组,颜色由RGBA组成,所以数组中每4个点组成一个颜色值,需要分别实现filter对于特效,需要定期改变像素值。当我们通过ctx.drawImage()方法获取图片并绘制到cavans中时,我们可以通过ctx.getImageData()方法获取图片数据。然后就可以使用filter.js调用方法来实现滤镜效果了。Cavans前期准备1.获取cavansletfilterCavans=document.getElementById("filterCavans");filterCavans.width=img.clientWidth;filterCavans.height=img.clientHeight;2.获取二维上下文对象ctx=filterCavans.getContext("2d");3.给cavans画图letimg=document.getElementById("img");ctx.drawImage(img,0,0,img.clientWidth,img.clientHeight);4.获取在cavans上绘制的图片数据canvasData=ctx.getImageData(0,0,filterCavans.width,filterCavans.height);原理与实现1.黑白调原理:判断当前像素点的RGB值是否大于255的一半,大于则设置为255,小于则设置为255全部setto0blackWhite(imageData){//该区域图像的像素集letdata=imageData.data;for(leti=0;i255/2){data[i]=255data[i+1]=255data[i+2]=255}elseif(r<255/2){data[i]=0data[i+1]=0data[i+2]=0}}}2.灰度调原理:设置当前像素点的RGB值为平均灰度(imageDataofthecurrentpixelRGB){让数据=imageData.data;for(leti=0;i0;i--){//行for(letj=w;j>0;j--){//列for(letk=0;k<3;k++){让num=(i*w+j)*4+k;让numUp=((i-1)*w+j)*4+k;让numDown=((i+1)*w+j)*4+k;数据[num]=数据[num]-数据[numUp-4]+128;}}}}8.雾化原理:通过随机方法fog(imageData){l在当前像素周围设置255个白色值etw=imageData.width,h=imageData.height;让数据=imageData.data;for(leti=h;i>0;i--){//linefor(letj=w;j>0;j--){//列letnum=(i*w+j)*4;如果(Math.random()<0.1){数据[num]=255;数据[数+1]=255;数据[数+2]=255;}}}}9。毛玻璃原理:用当前点周围一定范围内的任意点的颜色来替换当前点的颜色,最常用的是随机使用相邻的点来替换spread(canvasData){让w=canvasData.width,h=canvasData.height;for(leti=0;i