图片取色,头像加框,滤镜效果
代码组织,建个文件夹,进去,建个HTML文件,粘贴如下代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>在线图片处理</title> <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"/> <meta name="description" content="在线图片处理"/> <meta name="keywords" content="图片,取色器,处理,头像,边框,滤镜"/> <style type="text/css"> /* 公共部分 start */ *{ margin: 0px; padding: 0px; } #thecolor,#beautify,#filter{ width: 100%; position: absolute; left: 0px; top: 0px; } #beautify,#filter{ display: none; } #routing{ position: fixed; left: 0px; top: 200px; z-index: 999; background: #E0E0E0; } #routing ul li{ height: 40px; line-height: 40px; width: 160px; text-align: center; } #routing ul li:first-child{ background: #5A5AAD; } #routing ul li:first-child a{ color: white; } a:hover, a:visited, a:link, a:active{ text-decoration: none; font-weight: 700; font-size: 20px; color: #5A5AAD; } ul li{ list-style: none; } /* 公共部分 end */ /* 在线图片取色器 start */ .rongqi{ height: 20px; width: 185px; margin-top: 10px; display: inline-block; } .yanse{ height: 20px; width: 20px; float: left; cursor: pointer; } .daima{ height: 20px; width: 155px; line-height: 20px; float: right; } .title{ width: 100%; height: 60px; background: #1AB2B7; color: white; line-height: 60px; text-align: center; font-size: 25px; font-weight: 700; } .main{ width: 60%; margin: 0 auto; } .s1{ background: #408080; color: white !important; } .s2{ background: white; color: #353535 !important; } .last{ width:100%; } .geshi{ border: 1px solid #408080; border-radius: 7px; padding: 5px 10px; color: #353535; cursor: pointer; } #qiongju{ font-size: 17px; padding: 8px 13px; color: white; border: 1px solid #1AB2B7; background: #1AB2B7; } .colorbody{ position: relative; width: 445px; height: 30px; margin-top: 15px; } .colorbody div{ width: 100px; height: 30px; border: 1xp solid red; float: left; background: #E0E0E0; border-radius: 5px; cursor: pointer; } #colorsize{ color: red; font-weight: 700; } .upload{ background: #1AB2B7; color: white; padding: 5px 10px; position: relative; right: 89px; z-index: 1; } input{ width: 84px; z-index: 2; position: relative; opacity: 0; } p{ font-size: 18px; } .last,#quanbu{ color: grey; } /* 在线图片取色器 end */ /* 头像美化 start */ .logos{ width: 300px; height: 300px; margin: 30px auto 0; cursor: pointer; display: block; } .bhb{ width: 60%; display: none; position: absolute; left: 20%; top: 90px; } .logokuang{ padding: 10px; border: 3px solid #408080; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; } .thesize{ display: inline-block; width: 50px; height: 50px; color: white; background: #108757; font-size: 42px; font-weight: 700; text-align: center; line-height: 50px; border-radius: 5px; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .generate,.generates{ position: relative; top: 370px; border-style: none; padding: 10px 15px; background: #108757; color: white; font-size: 20px; cursor: pointer; } .yichu{ position: absolute; left: 0px; top: 0px; width: 300px; height: 300px; overflow: hidden; } #bhuabans{ position: absolute; top: 50px; left: 50px; cursor: move; } .setcss{ padding-top: 5px; padding-bottom: 5px; position: relative; top: 340px; } .setthesize{ padding-top: 5px; padding-bottom: 5px; position: relative; top: 320px; } /* 头像美化 end */ /* 滤镜效果 start */ .clogos{ width: 650px; height: 550px; margin: 30px auto 0; cursor: pointer; display: block; } .cbhb{ width: 60%; display: none; position: absolute; left: 20%; top: 90px; } .photocss{ cursor: pointer; display: inline-block; padding: 5px 10px; margin-bottom: 15px; font-size: 20px; color: #EA7500; border: 3px solid #EA7500; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .downloadimg{ border-style: none; padding: 10px 15px; background: #EA7500; color: white; font-size: 20px; cursor: pointer; } /* 滤镜效果 end */ </style> </head> <body> <!-- 路由部分HTML --> <div id="routing"> <ul> <li><a href="#thecolor">在线图片取色器</a></li> <li><a href="#beautify">头像优化</a></li> <li><a href="#filter">滤镜效果</a></li> </ul> </div> <!-- 在线图片取色器部分HTML --> <div id="thecolor"> <div class="title">在线图片取色器</div> <div class="main"> <br/> <p>选择一张图片,可以<b style="color: red;">直接点击取单色</b>,也可以列出所有颜色,支持RGB和十六进制两种表示方法</p> <br/><br/> <input type="file" id="shuru" accept="image/*" /> <span class="upload">上传图片</span> <br/><br/><br/> <div id="liechu" style="display: none;"> <span class="geshi s1">十六进制表示法</span> <span class="geshi">RGB表示法</span> <br/><br/> <p>设置<b style="color: red;">颜色区间</b>(列出全部颜色时,数字越小识别的颜色越多,速度越慢),当前区间大小: <span id="colorsize">8</span></p> <div class="colorbody"> <div style="background: #6FB7B7;"></div> <div style="margin-left: 15px;background: #6FB7B7;"></div> <div style="margin-left: 15px;"></div> <div style="margin-left: 15px;"></div> </div> <br/><br/> <span id="qiongju" class="geshi">列出所有颜色</span> <span>(对列出的颜色进行点击可以切换单个颜色的表示方法或者复制颜色代码)</span> </div> <br/> <canvas id="huaban" width="0" height="0"></canvas> <br/> <!-- 显示选中的颜色 --> <div class="last"></div> </div> <!-- 列出全部的颜色 --> <div id="quanbu" class="main" style="border-top: 1px solid #408080;margin-top: 10px;"></div> </div> <!-- 头像美化部分HTML --> <div id="beautify"> <div class="title" style="background: #108757;">头 像 美 化</div> <input type="file" id="logo" accept="image/*" style="display: none;" /> <div class="logos"> <img src="./images/5.jpg" width="300" height="300" /> </div> <div class="bhb"> <div class="yichu"> <canvas id="bhuaban" width="300" height="300" ></canvas> <canvas id="bhuabans" width="200" height="200"></canvas> </div> <div class="setthesize"> <span class="thesize">+</span> <span class="thesize">-</span> <span class="thesize" style="width: 100px;height: 50px;">默认</span> </div> <div class="setcss"> <span class="logokuang" style="background: #408080;color: white;">方形国旗</span> <span class="logokuang">圆形国旗</span> <span class="logokuang">国庆快乐</span> <span class="logokuang">70周年</span> </div> <button type="button" class="generate">生成头像</button> <button type="button" class="generates" style="display: none;">重新生成</button> </div> </div> <!-- 滤镜效果部分HTML --> <div id="filter"> <div class="title" style="background: #EA7500;">滤 镜 效 果</div> <input type="file" id="photo" accept="image/*" /> <div class="clogos"> <img src="./images/6.jpg" width="650" height="550" /> </div> <div class="cbhb"> <canvas id="chuaban" width="0" height="0"></canvas> <div style="width: 100%;margin-top: 20px;"> <span class="photocss" style="background: #EA7500;color: white;">原图</span> <span class="photocss">灰度</span> <span class="photocss">黑白</span> <span class="photocss">底片</span> <span class="photocss">去色</span> <span class="photocss">单色(红)</span> <span class="photocss">单色(绿)</span> <span class="photocss">单色(蓝)</span> <span class="photocss">怀旧</span> <span class="photocss">熔铸</span> <span class="photocss">冰冻</span> <span class="photocss">连环画</span> <span class="photocss">浮雕</span> <span class="photocss">暗调</span> <span class="photocss">透明</span> <span class="photocss">霓虹</span> <span class="photocss">抖音红</span> </div> <button type="button" class="downloadimg">下载</button> <a href="#" id="downf" download="滤镜效果.png"></a> </div> </div> <script type="text/javascript"> ;(function(){ //路由部分 var routings = document.getElementById("routing").children[0]; var routinga = routings.children[0]; var routingb = routings.children[1]; var routingc = routings.children[2]; var rthecolor = document.getElementById("thecolor"); var rbeautify = document.getElementById("beautify"); var rfilter = document.getElementById("filter"); var arrs = [routinga, routingb, routingc, routinga.children[0], routingb.children[0], routingc.children[0], rthecolor, rbeautify, rfilter]; window.addEventListener("hashchange", changerouting); function changerouting(){//路由改变时触发的函数 if(location.hash == "#thecolor" || location.hash == ""){ routingcss(0); }else if(location.hash == "#beautify"){ routingcss(1); }else if(location.hash == "#filter"){ routingcss(2); }else{ } } function routingcss(k){//封装 路由样式改变div的隐藏显示 for(let i = 0; i <= 2; ++i){ arrs[i].style.background = "#E0E0E0"; } for(let i = 3; i <= 5; ++i){ arrs[i].style.color = "#5A5AAD"; } for(let i = 6; i <= 8; ++i){ arrs[i].style.display = "none"; } arrs[k].style.background = "#5A5AAD"; arrs[k+3].style.color = "white"; arrs[k+6].style.display = "block"; } changerouting(); //图片取色器部分 var huaban = document.getElementById("huaban"); var s1 = document.getElementsByTagName("span")[1]; var s2 = document.getElementsByTagName("span")[2]; var cc = document.getElementsByClassName("colorbody")[0]; var c1 = cc.getElementsByTagName("div")[0]; var c2 = cc.getElementsByTagName("div")[1]; var c3 = cc.getElementsByTagName("div")[2]; var c4 = cc.getElementsByTagName("div")[3]; var cbackcolor = ["#6FB7B7","#E0E0E0","#E0E0E0","#E0E0E0"]; var cax = huaban.getContext("2d"); var xiangsu = null;//存储图片的像素信息 var code = [1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F']; var zt = 1;//表示 十六进制表示法 RGB表示法的切换状态 var jg = 8;//表示颜色间隔 var jgAdd = (256/jg)*(256/jg)*(256/jg);//表示颜色总量 var arr = new Array();//表示颜色区间,间隔为jg //初始化颜色区间 for(let i = 0; i < jgAdd; ++i) { arr[i] = new Array(); arr[i][0] = 0; arr[i][1] = 0; arr[i][2] = 0; arr[i][3] = 0; } document.getElementById("shuru").onchange = function(){//上传图片后,获取像素信息,绘制到canvas上 if(this.files[0].name != "") { document.getElementById("liechu").style.display = "block"; } document.getElementsByClassName("last")[0].innerHTML = ""; document.getElementById("quanbu").innerHTML = ""; var reader = new FileReader(); reader.readAsDataURL(this.files[0]); reader.onload = function(){ var image = new Image(); image.src = reader.result; image.onload = function(){ huaban.width = this.width; huaban.height = this.height; cax.drawImage(image, 0, 0, this.width, this.height); xiangsu = cax.getImageData(0, 0, this.width, this.height); }; }; } c1.onclick = function(){ jg = 4; reset(); cbackcolor = ["#6FB7B7","#E0E0E0","#E0E0E0","#E0E0E0"]; setcbackcolor(); } c2.onclick = function(){ jg = 8; reset(); cbackcolor = ["#6FB7B7","#6FB7B7","#E0E0E0","#E0E0E0"]; setcbackcolor(); } c3.onclick = function(){ jg = 16; reset(); cbackcolor = ["#6FB7B7","#6FB7B7","#6FB7B7","#E0E0E0"]; setcbackcolor(); } c4.onclick = function(){ jg = 32; reset(); cbackcolor = ["#6FB7B7","#6FB7B7","#6FB7B7","#6FB7B7"]; setcbackcolor(); } function setcbackcolor(){//封装 设置颜色区间的背景颜色 for(let i = 1; i <= 4; ++i){ let temp = "c" + i; eval(temp).style.background = cbackcolor[i-1]; } } document.getElementById("quanbu").onclick = qie; document.getElementsByClassName("last")[0].onclick = qie; function qie(q){//十进制表示法和rgb表示法来回切换,复制内容到剪切板 var q = q || window.event; var target = q.target || q.srcElement; if(target.className == 'yanse'){ var content = target.nextSibling; var colorCode = target.style.background; if(content.innerHTML[0] == '#'){ } else{ colorCode = colorCode.slice(4, -1); colorCode = colorCode.split(','); for(let i = 0; i <= 2; ++i) { colorCode[i] = parseInt(colorCode[i]); } colorCode = '#' + shiliu(colorCode).join(''); } content.innerHTML = colorCode; } if(target.className == 'daima'){ var strcolor = target.innerHTML; var shuru = document.createElement("input"); shuru.setAttribute("type", "text"); shuru.setAttribute("id", "copycode"); shuru.setAttribute("value", strcolor); document.getElementsByTagName("body")[0].appendChild(shuru); document.getElementById("copycode").select(); document.execCommand("copy"); document.getElementById("copycode").remove(); alert("已复制到剪切板"); } } s1.onclick = function(){//切成十六进制表示法 zt = 1; s1.className = "geshi s1"; s2.className = "geshi s2"; } s2.onclick = function(){//切成RGB表示法 zt = 2; s1.className = "geshi s2"; s2.className = "geshi s1"; } huaban.onclick = function(){//获取当前点击的颜色信息并创建相关节点添加到文档 var e = arguments[0] || window.event; var x = e.offsetX; var y = e.offsetY; var tuKuan = xiangsu.width; var rgb = ((y - 1) * tuKuan + x) * 4; var rgbx = xiangsu.data[rgb - 4]; var rgby = xiangsu.data[rgb - 3]; var rgbz = xiangsu.data[rgb - 2]; var ysdaima = shiliu([rgbx, rgby, rgbz]); ysdaima = '#' + ysdaima.join(''); var shili = document.createElement("div"); var yanse = document.createElement("div"); var daima = document.createElement("div"); var pinjie = "rgb(" + rgbx + "," + rgby + "," + rgbz + ")"; yanse.style.background = pinjie; if(zt == 1) { daima.innerHTML = ysdaima; } else { daima.innerHTML = pinjie; } daima.setAttribute("class", "daima"); shili.setAttribute("class", "rongqi"); yanse.setAttribute("class", "yanse"); yanse.setAttribute("title", "点击切换"); daima.setAttribute("title", "点击复制"); shili.appendChild(yanse); shili.appendChild(daima); var zhuti = document.getElementsByClassName("last")[0]; zhuti.appendChild(shili); } function reset(){ //初始化函数 jgAdd = (256/jg)*(256/jg)*(256/jg); arr = new Array(); for(let i = 0; i < jgAdd; ++i) { arr[i] = new Array(); arr[i][0] = 0; arr[i][1] = 0; arr[i][2] = 0; arr[i][3] = 0; } document.getElementById("colorsize").innerHTML = jg; } document.getElementById("qiongju").onclick = function(){//遍历每个像素点,对相似颜色进行过滤处理,创建相关节点添加到文档 var len = xiangsu.width * xiangsu.height * 4; var temp = xiangsu.data; var dom = ""; for(let i = 0; i < len; i = i + 4) { let jgs = 256/jg; let linshi = Math.floor(temp[i]/jg)*jgs*jgs + Math.floor(temp[i+1]/jg)*jgs + Math.floor(temp[i+2]/jg); if(arr[linshi][3] == 0){ arr[linshi][0] = temp[i]; arr[linshi][1] = temp[i+1]; arr[linshi][2] = temp[i+2]; arr[linshi][3] = 1; } } for(let i = 0; i < jgAdd; ++i) { if(arr[i][3] == 1) { let color = ""; if(zt == 1){ let ysdaima = shiliu([ arr[i][0], arr[i][1], arr[i][2] ]); ysdaima = '#' + ysdaima.join(''); color = ysdaima; }else{ color = "rgb(" + arr[i][0] + "," + arr[i][1] + "," + arr[i][2] + ")"; } dom = dom + "<div class='rongqi'><div class='yanse' title='点击切换' style='background:" + color + ";'></div><div class='daima' title='点击复制'>" + color + "</div></div>"; arr[i][0] = 0; arr[i][1] = 0; arr[i][2] = 0; arr[i][3] = 0; } } document.getElementById("quanbu").innerHTML = dom; } function shiliu(shuzu){//十进制转十六进制 function shilius(shu) { var yushu = 0; var jieguo = ""; if(shu == 0){return "00";} while(shu != 0) { yushu = shu % 16; shu = (shu - yushu)/16; if(yushu!=0){ jieguo = jieguo + code[yushu-1]; } else{ jieguo = jieguo + '0'; } } if(jieguo.length == 1){ jieguo = jieguo + '0'; } return jieguo.split('').reverse().join(''); } shuzu[0] = shilius(shuzu[0]); shuzu[1] = shilius(shuzu[1]); shuzu[2] = shilius(shuzu[2]); return shuzu; } //头像美化 var bhuaban = document.getElementById("bhuaban"); var bcax = bhuaban.getContext("2d"); var bhuabans = document.getElementById("bhuabans"); var bcaxs = bhuabans.getContext("2d"); var ispressthe = 0;//代表是否按下鼠标,0代表没有,1代表已经按下 var ctwox = 0;//第二个canvas的x坐标 var ctwoy = 0;//第二个canvas的y坐标 var downx = 0;//鼠标按下的x坐标 var downy = 0;//鼠标按下的y坐标 var x = 0;//移动之后的x坐标 var y = 0;//移动之后的y坐标 var xx = 0;//用于存储两点之间的x偏移量 var yy = 0;//用于存储两点之间的y偏移量 var ctwowh = 200;//第二个canvas的宽度和高度 var y1 = document.getElementsByClassName("logokuang")[0]; var y2 = document.getElementsByClassName("logokuang")[1]; var y3 = document.getElementsByClassName("logokuang")[2]; var y4 = document.getElementsByClassName("logokuang")[3]; var btemp = y1; var imgstate = "./images/1.png"; document.getElementsByClassName("logos")[0].onclick = function(){//手动触发input的click事件 document.getElementById("logo").click(); } document.getElementById("logo").onchange = function(){//头像被上传后,显示到canvas document.getElementsByClassName("logos")[0].style.display = "none"; document.getElementsByClassName("bhb")[0].style.display = "block"; bhuabans.width = ctwowh; bhuabans.height = ctwowh; var reader = new FileReader(); reader.readAsDataURL(this.files[0]); reader.onload = function(){ imgload(reader.result, bcax, 300); imgload(imgstate, bcaxs, ctwowh); }; ctwox = bhuabans.getBoundingClientRect().x - bhuaban.getBoundingClientRect().x; ctwoy = bhuabans.getBoundingClientRect().y - bhuaban.getBoundingClientRect().y; } function imgload(isrc, iobject, ikg, x = 0, y = 0, fun = function(){}){//封装把图片对象绘制到canvas,参数(图片地址,canvas2d对象,宽高,x坐标,y坐标,回调函数) var image = new Image(); image.src = isrc; image.onload = function(){ iobject.drawImage(image, x, y, ikg, ikg); fun(); } } bhuabans.onmousedown = function(event){//鼠标按下 var event = event || window.event; downx = event.screenX; downy = event.screenY; ispressthe = 1; } bhuabans.onmousemove = function(event){//移动第二个canvas var event = event || window.event; if(ispressthe){ x = event.screenX; y = event.screenY; xx = x - downx; yy = y - downy; ctwox = ctwox + xx; ctwoy = ctwoy + yy; downx = x; downy = y; canvasposition(); } } bhuabans.onmouseup = function(event){//鼠标抬起 ispressthe = 0; } bhuaban.onmouseup = function(event){//鼠标抬起 ispressthe = 0; } document.getElementsByClassName("thesize")[0].onclick = function(){//增大 ctwowh = ctwowh + 10; imgload(imgstate, bcaxs, ctwowh); bhuabans.width = ctwowh; bhuabans.height = ctwowh; } document.getElementsByClassName("thesize")[1].onclick = function(){//减小 ctwowh = ctwowh - 10; imgload(imgstate, bcaxs, ctwowh); bhuabans.width = ctwowh; bhuabans.height = ctwowh; } document.getElementsByClassName("thesize")[2].onclick = function(){//默认位置和大小 ctwowh = 300; ctwox = 0; ctwoy = 0; imgload(imgstate, bcaxs, 300); bhuabans.width = 300; bhuabans.height = 300; canvasposition(); } y1.onclick = function(){ imgstate = "./images/1.png"; icss(y1); canvasposition(); clearctwo(); } y2.onclick = function(){ imgstate = "./images/2.png"; icss(y2); canvasposition(); clearctwo(); } y3.onclick = function(){ imgstate = "./images/3.png"; icss(y3); canvasposition(); clearctwo(); } y4.onclick = function(){ imgstate = "./images/4.png"; icss(y4); canvasposition(); clearctwo(); } function icss(obj){//封装切换样式,参数(对象) obj.style.background = "#408080"; obj.style.color = "white"; if(btemp && btemp != obj){ btemp.style.background = "white"; btemp.style.color = "black"; } btemp = obj; } function canvasposition(){//封装调整第二个画板位置 bhuabans.style.left = ctwox + "px"; bhuabans.style.top = ctwoy + "px"; } function clearctwo(){//封装清屏第二个画板并重新绘制 bcaxs.clearRect(0, 0, ctwowh, ctwowh); imgload(imgstate, bcaxs, ctwowh); } document.getElementsByClassName("generate")[0].onclick = function(){//生成最终头像 imgload(imgstate, bcax, ctwowh, ctwox, ctwoy, function(){ var temp = bhuaban.toDataURL("image/png"); var a = document.createElement("a"); rbeautify.appendChild(a); a.href = temp; a.download = "加框头像.png"; a.click(); bhuabans.style.display = "none"; document.getElementsByClassName("setcss")[0].style.display = "none"; document.getElementsByClassName("setthesize")[0].style.display = "none"; document.getElementsByClassName("generate")[0].style.display = "none"; document.getElementsByClassName("generates")[0].style.display = "block"; }); } document.getElementsByClassName("generates")[0].onclick = function(){//重新生成 location.reload(); } //滤镜效果 var chuaban = document.getElementById("chuaban"); var ccax = chuaban.getContext("2d"); var cxiangsu = null;//图片像素信息 var cxs = [];//备份的像素信息 var photoscss = document.getElementsByClassName("photocss"); var filterstate = 0;//保存滤镜状态,默认原图 document.getElementsByClassName("clogos")[0].onclick = function(){//手动触发input的click事件 document.getElementById("photo").click(); } document.getElementById("photo").onchange = function(){//头像被上传后,显示到canvas document.getElementsByClassName("clogos")[0].style.display = "none"; document.getElementsByClassName("cbhb")[0].style.display = "block"; var reader = new FileReader(); reader.readAsDataURL(this.files[0]); reader.onload = function(){ var image = new Image(); image.src = reader.result; image.onload = function(){ chuaban.width = this.width; chuaban.height = this.height; ccax.drawImage(image, 0, 0, this.width, this.height); cxiangsu = ccax.getImageData(0, 0, this.width, this.height); for(let i = 0, len = cxiangsu.data.length, temp = cxiangsu.data; i < len; ++i){ cxs.push(temp[i]); } }; }; } function restore(){//初始化像素信息 var temp = cxiangsu.data; for(let i = 0, len = cxs.length; i < len; ++i){ temp[i] = cxs[i]; } } function filters(k){//封装 各种滤镜切换时的样式 photoscss[filterstate].style.background = "white"; photoscss[filterstate].style.color = "#EA7500"; photoscss[k].style.background = "#EA7500"; photoscss[k].style.color = "white"; filterstate = k; } photoscss[0].onclick = function(){//原图 restore(); ccax.putImageData(cxiangsu, 0, 0); filters(0); } photoscss[1].onclick = function(){//灰度滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ var average = parseInt(0.3*temp[i] + 0.59*temp[i+1] + 0.11*temp[i+2]); temp[i] = temp[i+1] = temp[i+2] = average; } ccax.putImageData(cxiangsu, 0, 0); filters(1); } photoscss[2].onclick = function(){//黑白滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ var average = parseInt((temp[i] + temp[i+1] +temp[i+2])/3); if(average >= 100){ temp[i] = temp[i+1] = temp[i+2] = 255; }else{ temp[i] = temp[i+1] = temp[i+2] = 0; } } ccax.putImageData(cxiangsu, 0, 0); filters(2); } photoscss[3].onclick = function(){//底片滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i] = 255 - temp[i]; temp[i+1] = 255 - temp[i+1]; temp[i+2] = 255 - temp[i+2]; } ccax.putImageData(cxiangsu, 0, 0); filters(3); } photoscss[4].onclick = function(){//去色滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ var max = 0, min = 0, avg = 0; if(temp[i] > temp[i+1]){ if(temp[i] > temp[i+2]){ max = temp[i+1]; if(temp[i+1] > temp[i+2]){min = temp[i+2];} else{min = temp[i+1];} }else{ min = temp[i+1]; max = temp[i+2]; } }else{ if(temp[i+1] > temp[i+2]){ max = temp[i+1]; if(temp[i] > temp[i+2]){min = temp[i+2];} else{min = temp[i];} }else{ max = temp[i+2]; min = temp[i]; } } avg = parseInt((max + min)/2); temp[i] = temp[i+1] = temp[i+2] = avg; } ccax.putImageData(cxiangsu, 0, 0); filters(4); } photoscss[5].onclick = function(){//单色滤镜(红色) restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i+1] = 0; temp[i+2] = 0; } ccax.putImageData(cxiangsu, 0, 0); filters(5); } photoscss[6].onclick = function(){//单色滤镜(绿色) restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i] = 0; temp[i+2] = 0; } ccax.putImageData(cxiangsu, 0, 0); filters(6); } photoscss[7].onclick = function(){//单色滤镜(蓝色) restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i] = 0; temp[i+1] = 0; } ccax.putImageData(cxiangsu, 0, 0); filters(7); } photoscss[8].onclick = function(){//怀旧滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i] = parseInt(0.393*temp[i] + 0.769*temp[i+1] + 0.189*temp[i+2]); temp[i+1] = parseInt(0.349*temp[i] + 0.686*temp[i+1] + 0.168*temp[i+2]); temp[i+2] = parseInt(0.272*temp[i] + 0.534*temp[i+1] + 0.131*temp[i+2]); } ccax.putImageData(cxiangsu, 0, 0); filters(8); } photoscss[9].onclick = function(){//熔铸滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i] = parseInt(temp[i]*128/(temp[i+1] + temp[i+2] + 1)); temp[i+1] = parseInt(temp[i+1]*128/(temp[i] + temp[i+2] + 1)); temp[i+2] = parseInt(temp[i+2]*128/(temp[i+1] + temp[i] + 1)); } ccax.putImageData(cxiangsu, 0, 0); filters(9); } photoscss[10].onclick = function(){//冰冻滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i] = parseInt(Math.abs(temp[i]-temp[i+1]-temp[i+2])*3/2); temp[i+1] = parseInt(Math.abs(temp[i+1]-temp[i]-temp[i+2])*3/2); temp[i+2] = parseInt(Math.abs(temp[i+2]-temp[i+1]-temp[i])*3/2); } ccax.putImageData(cxiangsu, 0, 0); filters(10); } photoscss[11].onclick = function(){//连环画滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ temp[i] = parseInt(Math.abs(temp[i+1]-temp[i+2]+temp[i+1]+temp[i])*temp[i]/256); temp[i+1] = parseInt(Math.abs(temp[i+2]-temp[i+1]+temp[i+2]+temp[i])*temp[i]/256); temp[i+2] = parseInt(Math.abs(temp[i+2]-temp[i+1]+temp[i+2]+temp[i])*temp[i+1]/256); } ccax.putImageData(cxiangsu, 0, 0); filters(11); } photoscss[12].onclick = function(){//浮雕滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len - 1; i = i + 4){ temp[i] = temp[i] - temp[i+4] + 128; temp[i+1] = temp[i+1] - temp[i+5] + 128; temp[i+2] = temp[i+2] - temp[i+6] + 128; } ccax.putImageData(cxiangsu, 0, 0); filters(12); } photoscss[13].onclick = function(){//暗调滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len - 1; i = i + 4){ temp[i] = parseInt(temp[i]*temp[i]/255); temp[i+1] = parseInt(temp[i+1]*temp[i+1]/255); temp[i+2] = parseInt(temp[i+2]*temp[i+2]/255); } ccax.putImageData(cxiangsu, 0, 0); filters(13); } photoscss[14].onclick = function(){//透明滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len - 1; i = i + 4){ temp[i+3] = 120; } ccax.putImageData(cxiangsu, 0, 0); filters(14); } photoscss[15].onclick = function(){//霓虹滤镜 restore(); var temp = cxiangsu.data; var w = cxiangsu.width; for(let i = 0, len = chuaban.width * (chuaban.height-1) * 4; i < len - 1; i = i + 4){ if((i+1)%w == 0){} else{ temp[i] = parseInt(2*Math.sqrt((temp[i]-temp[i+4])*(temp[i]-temp[i+4])+(temp[i]-temp[i+4*w])*(temp[i]-temp[i+4*w]))); temp[i+1] = parseInt(2*Math.sqrt((temp[i+1]-temp[i+5])*(temp[i+1]-temp[i+5])+(temp[i+1]-temp[i+1+4*w])*(temp[i+1]-temp[i+1+4*w]))); temp[i+2] = parseInt(2*Math.sqrt((temp[i+2]-temp[i+6])*(temp[i+2]-temp[i+6])+(temp[i+2]-temp[i+2+4*w])*(temp[i+2]-temp[i+2+4*w]))); } if(temp[i]>255){temp[i] = 255;} if(temp[i+1]>255){temp[i+1] = 255;} if(temp[i+2]>255){temp[i+2] = 255;} } ccax.putImageData(cxiangsu, 0, 0); filters(15); } photoscss[16].onclick = function(){//抖音红滤镜 restore(); var temp = cxiangsu.data; for(let i = 0, len = chuaban.width * chuaban.height * 4; i < len; i = i + 4){ var average = parseInt((temp[i] + temp[i+1] +temp[i+2])/3); if(average >= 100){ temp[i] = temp[i+1] = temp[i+2] = 255; }else{ temp[i] = 255; temp[i+1] = 43; temp[i+2] = 99; } } ccax.putImageData(cxiangsu, 0, 0); filters(16); } document.getElementsByClassName("downloadimg")[0].onclick = function(){//生成最终滤镜效果 var temp = chuaban.toDataURL("image/png"); var a = document.getElementById("downf"); a.href = temp; a.click(); } })(); </script> </body> </html>
建个imgages文件夹,进去
放如下图片
1.png

2.png

3.png

4.png

5.jpg

6.jpg


浙公网安备 33010602011771号