UNPKG

picture-verification-code

Version:
2 lines (1 loc) 1.94 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});function t(t,h){return Math.floor(Math.random()*(h-t)+t)}function h(h,i){return"rgb("+t(h,i)+", "+t(h,i)+", "+t(h,i)+")"}exports.createCode=function(h){h=h||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(h).fill("").map((()=>a[t(0,a.length-1)])).join("")},exports.default=class{constructor(...t){const[i=100,s=40]=t;this.width=i,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=h(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(i){const{canvas:s,ctx:e}=this;e.clearRect(0,0,s.width,s.height),this.code=i?i.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||h(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),r=this.height/2;return this.code.forEach(((i,s)=>{const n=a*(s+.5);e.font=t(this.height/2,this.height)+"px SimHei",e.fillStyle=h(50,160),e.shadowOffsetX=t(-3,3),e.shadowOffsetY=t(-3,3),e.shadowBlur=t(-3,3),e.shadowColor="rgba(0, 0, 0, 0.3)",e.translate(n,r),e.fillText(i,0,0),e.translate(-n,-r)})),this.canvas.toDataURL("image/jpeg",1)}};