picture-verification-code
Version:
Picture verification code
2 lines (1 loc) • 1.87 kB
JavaScript
class t{constructor(...t){const[h=100,s=40]=t;this.width=h,this.height=s,this.size=16,this.code=[],this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.canvas.width=this.width,this.canvas.height=this.height,this.ctx.fillStyle=i(180,240),this.ctx.fillRect(0,0,this.width,this.height)}setBgColor(t){return this.bgColor=t,this}setBgImg(t){return this.bgImage=t,this}setWidth(t){return this.width=t,this}setHeight(t){return this.height=t,this}render(t){const{canvas:s,ctx:e}=this;e.clearRect(0,0,s.width,s.height),this.code=t?t.split(""):[],this.size=Math.min(16,this.height-14),this.width=Math.max(this.width,(this.size+5)*this.code.length),this.canvas.width=this.width,this.canvas.height=this.height,this.ctx.fillStyle=this.bgColor||i(180,240),this.ctx.fillRect(0,0,this.width,this.height),this.bgImage&&this.ctx.drawImage(this.bgImage,0,0,this.width,this.height),this.canvas.style.cursor="pointer",this.canvas.innerHTML="<span style='color: red'>你的浏览器不支持canvas</span>",e.textBaseline="middle";const a=this.width/(this.code.length+1),n=this.height/2;return this.code.forEach(((t,s)=>{const r=a*(s+.5);e.font=h(this.height/2,this.height)+"px SimHei",e.fillStyle=i(50,160),e.shadowOffsetX=h(-3,3),e.shadowOffsetY=h(-3,3),e.shadowBlur=h(-3,3),e.shadowColor="rgba(0, 0, 0, 0.3)",e.translate(r,n),e.fillText(t,0,0),e.translate(-r,-n)})),this.canvas.toDataURL("image/jpeg",1)}}function h(t,h){return Math.floor(Math.random()*(h-t)+t)}function i(t,i){return"rgb("+h(t,i)+", "+h(t,i)+", "+h(t,i)+")"}function s(t){t=t||4;const i=[],s=[];let e=[];for(let t=65;t<91;t++)i.push(String.fromCharCode(t));for(let t=97;t<123;t++)s.push(String.fromCharCode(t));e=new Array(10).fill("").map(((t,h)=>`${h}`));const a=[...e,...i,...s];return new Array(t).fill("").map((()=>a[h(0,a.length-1)])).join("")}export{s as createCode,t as default};