You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
10 KiB
1 lines
10 KiB
{"remainingRequest":"C:\\Users\\明允\\Desktop\\manage\\springboot\\vue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\明允\\Desktop\\manage\\springboot\\vue\\src\\components\\Identify.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\明允\\Desktop\\manage\\springboot\\vue\\src\\components\\Identify.vue","mtime":1689170964000},{"path":"C:\\Users\\明允\\Desktop\\manage\\springboot\\vue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1713785856543},{"path":"C:\\Users\\明允\\Desktop\\manage\\springboot\\vue\\node_modules\\babel-loader\\lib\\index.js","mtime":1713785857863},{"path":"C:\\Users\\明允\\Desktop\\manage\\springboot\\vue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1713785856543},{"path":"C:\\Users\\明允\\Desktop\\manage\\springboot\\vue\\node_modules\\vue-loader\\lib\\index.js","mtime":1713785858382}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnSWRlbnRpZnknLAogIHByb3BzOiB7CiAgICBpZGVudGlmeUNvZGU6IHsKICAgICAgdHlwZTogU3RyaW5nLAogICAgICBkZWZhdWx0OiAnMTIzNCcKICAgIH0sCiAgICBmb250U2l6ZU1pbjogewogICAgICB0eXBlOiBOdW1iZXIsCiAgICAgIGRlZmF1bHQ6IDI4CiAgICB9LAogICAgZm9udFNpemVNYXg6IHsKICAgICAgdHlwZTogTnVtYmVyLAogICAgICBkZWZhdWx0OiA0MAogICAgfSwKICAgIGJhY2tncm91bmRDb2xvck1pbjogewogICAgICB0eXBlOiBOdW1iZXIsCiAgICAgIGRlZmF1bHQ6IDE4MAogICAgfSwKICAgIGJhY2tncm91bmRDb2xvck1heDogewogICAgICB0eXBlOiBOdW1iZXIsCiAgICAgIGRlZmF1bHQ6IDI0MAogICAgfSwKICAgIGNvbG9yTWluOiB7CiAgICAgIHR5cGU6IE51bWJlciwKICAgICAgZGVmYXVsdDogNTAKICAgIH0sCiAgICBjb2xvck1heDogewogICAgICB0eXBlOiBOdW1iZXIsCiAgICAgIGRlZmF1bHQ6IDE2MAogICAgfSwKICAgIGxpbmVDb2xvck1pbjogewogICAgICB0eXBlOiBOdW1iZXIsCiAgICAgIGRlZmF1bHQ6IDQwCiAgICB9LAogICAgbGluZUNvbG9yTWF4OiB7CiAgICAgIHR5cGU6IE51bWJlciwKICAgICAgZGVmYXVsdDogMTgwCiAgICB9LAogICAgZG90Q29sb3JNaW46IHsKICAgICAgdHlwZTogTnVtYmVyLAogICAgICBkZWZhdWx0OiAwCiAgICB9LAogICAgZG90Q29sb3JNYXg6IHsKICAgICAgdHlwZTogTnVtYmVyLAogICAgICBkZWZhdWx0OiAyNTUKICAgIH0sCiAgICBjb250ZW50V2lkdGg6IHsKICAgICAgdHlwZTogTnVtYmVyLAogICAgICBkZWZhdWx0OiAxMTIKICAgIH0sCiAgICBjb250ZW50SGVpZ2h0OiB7CiAgICAgIHR5cGU6IE51bWJlciwKICAgICAgZGVmYXVsdDogNDAKICAgIH0KICB9LAogIG1ldGhvZHM6IHsKICAgIC8vIOeUn+aIkOS4gOS4qumaj+acuuaVsAogICAgcmFuZG9tTnVtIChtaW4sIG1heCkgewogICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW4pCiAgICB9LAogICAgLy8g55Sf5oiQ5LiA5Liq6ZqP5py655qE6aKc6ImyCiAgICByYW5kb21Db2xvciAobWluLCBtYXgpIHsKICAgICAgdmFyIHIgPSB0aGlzLnJhbmRvbU51bShtaW4sIG1heCkKICAgICAgdmFyIGcgPSB0aGlzLnJhbmRvbU51bShtaW4sIG1heCkKICAgICAgdmFyIGIgPSB0aGlzLnJhbmRvbU51bShtaW4sIG1heCkKICAgICAgcmV0dXJuICdyZ2IoJyArIHIgKyAnLCcgKyBnICsgJywnICsgYiArICcpJwogICAgfSwKICAgIGRyYXdQaWMgKCkgewogICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MtY2FudmFzJykKICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpCiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnYm90dG9tJwogICAgICAvLyDnu5jliLbog4zmma8KICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMucmFuZG9tQ29sb3IoCiAgICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvck1pbiwKICAgICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yTWF4CiAgICAgICkKICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuY29udGVudFdpZHRoLCB0aGlzLmNvbnRlbnRIZWlnaHQpCiAgICAgIC8vIOe7mOWItuaWh+WtlwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaWRlbnRpZnlDb2RlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5kcmF3VGV4dChjdHgsIHRoaXMuaWRlbnRpZnlDb2RlW2ldLCBpKQogICAgICB9CiAgICAgIHRoaXMuZHJhd0xpbmUoY3R4KQogICAgICB0aGlzLmRyYXdEb3QoY3R4KQogICAgfSwKICAgIGRyYXdUZXh0IChjdHgsIHR4dCwgaSkgewogICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5yYW5kb21Db2xvcih0aGlzLmNvbG9yTWluLCB0aGlzLmNvbG9yTWF4KQogICAgICBjdHguZm9udCA9CiAgICAgICAgICB0aGlzLnJhbmRvbU51bSh0aGlzLmZvbnRTaXplTWluLCB0aGlzLmZvbnRTaXplTWF4KSArICdweCBTaW1IZWknCiAgICAgIHZhciB4ID0gKGkgKyAxKSAqICh0aGlzLmNvbnRlbnRXaWR0aCAvICh0aGlzLmlkZW50aWZ5Q29kZS5sZW5ndGggKyAxKSkKICAgICAgdmFyIHkgPSB0aGlzLnJhbmRvbU51bSh0aGlzLmZvbnRTaXplTWF4LCB0aGlzLmNvbnRlbnRIZWlnaHQgLSA1KQogICAgICB2YXIgZGVnID0gdGhpcy5yYW5kb21OdW0oLTMwLCAzMCkKICAgICAgLy8g5L+u5pS55Z2Q5qCH5Y6f54K55ZKM5peL6L2s6KeS5bqmCiAgICAgIGN0eC50cmFuc2xhdGUoeCwgeSkKICAgICAgY3R4LnJvdGF0ZShkZWcgKiBNYXRoLlBJIC8gMjcwKQogICAgICBjdHguZmlsbFRleHQodHh0LCAwLCAwKQogICAgICAvLyDmgaLlpI3lnZDmoIfljp/ngrnlkozml4vovazop5LluqYKICAgICAgY3R4LnJvdGF0ZSgtZGVnICogTWF0aC5QSSAvIDI3MCkKICAgICAgY3R4LnRyYW5zbGF0ZSgteCwgLXkpCiAgICB9LAogICAgZHJhd0xpbmUgKGN0eCkgewogICAgICAvLyDnu5jliLblubLmibDnur8KICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHsKICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLnJhbmRvbUNvbG9yKAogICAgICAgICAgICB0aGlzLmxpbmVDb2xvck1pbiwKICAgICAgICAgICAgdGhpcy5saW5lQ29sb3JNYXgKICAgICAgICApCiAgICAgICAgY3R4LmJlZ2luUGF0aCgpCiAgICAgICAgY3R4Lm1vdmVUbygKICAgICAgICAgICAgdGhpcy5yYW5kb21OdW0oMCwgdGhpcy5jb250ZW50V2lkdGgpLAogICAgICAgICAgICB0aGlzLnJhbmRvbU51bSgwLCB0aGlzLmNvbnRlbnRIZWlnaHQpCiAgICAgICAgKQogICAgICAgIGN0eC5saW5lVG8oCiAgICAgICAgICAgIHRoaXMucmFuZG9tTnVtKDAsIHRoaXMuY29udGVudFdpZHRoKSwKICAgICAgICAgICAgdGhpcy5yYW5kb21OdW0oMCwgdGhpcy5jb250ZW50SGVpZ2h0KQogICAgICAgICkKICAgICAgICBjdHguc3Ryb2tlKCkKICAgICAgfQogICAgfSwKICAgIGRyYXdEb3QgKGN0eCkgewogICAgICAvLyDnu5jliLblubLmibDngrkKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMucmFuZG9tQ29sb3IoMCwgMjU1KQogICAgICAgIGN0eC5iZWdpblBhdGgoKQogICAgICAgIGN0eC5hcmMoCiAgICAgICAgICAgIHRoaXMucmFuZG9tTnVtKDAsIHRoaXMuY29udGVudFdpZHRoKSwKICAgICAgICAgICAgdGhpcy5yYW5kb21OdW0oMCwgdGhpcy5jb250ZW50SGVpZ2h0KSwKICAgICAgICAgICAgMSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMiAqIE1hdGguUEkKICAgICAgICApCiAgICAgICAgY3R4LmZpbGwoKQogICAgICB9CiAgICB9CiAgfSwKICB3YXRjaDogewogICAgaWRlbnRpZnlDb2RlICgpIHsKICAgICAgdGhpcy5kcmF3UGljKCkKICAgIH0KICB9LAogIG1vdW50ZWQgKCkgewogICAgdGhpcy5kcmF3UGljKCkKICB9Cn0K"},{"version":3,"sources":["Identify.vue"],"names":[],"mappings":";AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"Identify.vue","sourceRoot":"src/components","sourcesContent":["<template>\n <div class=\"s-canvas\">\n <canvas id=\"s-canvas\" :width=\"contentWidth\" :height=\"contentHeight\"></canvas>\n </div>\n</template>\n<script>\nexport default {\n name: 'Identify',\n props: {\n identifyCode: {\n type: String,\n default: '1234'\n },\n fontSizeMin: {\n type: Number,\n default: 28\n },\n fontSizeMax: {\n type: Number,\n default: 40\n },\n backgroundColorMin: {\n type: Number,\n default: 180\n },\n backgroundColorMax: {\n type: Number,\n default: 240\n },\n colorMin: {\n type: Number,\n default: 50\n },\n colorMax: {\n type: Number,\n default: 160\n },\n lineColorMin: {\n type: Number,\n default: 40\n },\n lineColorMax: {\n type: Number,\n default: 180\n },\n dotColorMin: {\n type: Number,\n default: 0\n },\n dotColorMax: {\n type: Number,\n default: 255\n },\n contentWidth: {\n type: Number,\n default: 112\n },\n contentHeight: {\n type: Number,\n default: 40\n }\n },\n methods: {\n // 生成一个随机数\n randomNum (min, max) {\n return Math.floor(Math.random() * (max - min) + min)\n },\n // 生成一个随机的颜色\n randomColor (min, max) {\n var r = this.randomNum(min, max)\n var g = this.randomNum(min, max)\n var b = this.randomNum(min, max)\n return 'rgb(' + r + ',' + g + ',' + b + ')'\n },\n drawPic () {\n var canvas = document.getElementById('s-canvas')\n var ctx = canvas.getContext('2d')\n ctx.textBaseline = 'bottom'\n // 绘制背景\n ctx.fillStyle = this.randomColor(\n this.backgroundColorMin,\n this.backgroundColorMax\n )\n ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)\n // 绘制文字\n for (let i = 0; i < this.identifyCode.length; i++) {\n this.drawText(ctx, this.identifyCode[i], i)\n }\n this.drawLine(ctx)\n this.drawDot(ctx)\n },\n drawText (ctx, txt, i) {\n ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)\n ctx.font =\n this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'\n var x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))\n var y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)\n var deg = this.randomNum(-30, 30)\n // 修改坐标原点和旋转角度\n ctx.translate(x, y)\n ctx.rotate(deg * Math.PI / 270)\n ctx.fillText(txt, 0, 0)\n // 恢复坐标原点和旋转角度\n ctx.rotate(-deg * Math.PI / 270)\n ctx.translate(-x, -y)\n },\n drawLine (ctx) {\n // 绘制干扰线\n for (let i = 0; i < 2; i++) {\n ctx.strokeStyle = this.randomColor(\n this.lineColorMin,\n this.lineColorMax\n )\n ctx.beginPath()\n ctx.moveTo(\n this.randomNum(0, this.contentWidth),\n this.randomNum(0, this.contentHeight)\n )\n ctx.lineTo(\n this.randomNum(0, this.contentWidth),\n this.randomNum(0, this.contentHeight)\n )\n ctx.stroke()\n }\n },\n drawDot (ctx) {\n // 绘制干扰点\n for (let i = 0; i < 20; i++) {\n ctx.fillStyle = this.randomColor(0, 255)\n ctx.beginPath()\n ctx.arc(\n this.randomNum(0, this.contentWidth),\n this.randomNum(0, this.contentHeight),\n 1,\n 0,\n 2 * Math.PI\n )\n ctx.fill()\n }\n }\n },\n watch: {\n identifyCode () {\n this.drawPic()\n }\n },\n mounted () {\n this.drawPic()\n }\n}\n</script>\n<style scoped>\n.s-canvas {\n height: 38px;\n}\n.s-canvas canvas{\n margin-top: 1px;\n margin-left: 8px;\n}\n</style>\n"]}]} |