用Canvas生成随机验证码(后端前端都可以)
- <!DOCTYPE html>
- <html>
-
- <head>
- <meta charset="UTF-8">
- <title></title>
- </head>
-
- <body>
- <canvas id="canvas" width="120" height="40"></canvas>
- <a href="#" id="changeImg">看不清,换一张</a>
- <script>
- /**生成一个随机数**/
- function randomNum(min, max) {
- return Math.floor(Math.random() * (max - min) + min);
- }
- /**生成一个随机色**/
- function randomColor(min, max) {
- var r = randomNum(min, max);
- var g = randomNum(min, max);
- var b = randomNum(min, max);
- return "rgb(" + r + "," + g + "," + b + ")";
- }
- drawPic();
- document.getElementById("changeImg").onclick = function(e) {
- e.preventDefault();
- drawPic();
- }
-
- /**绘制验证码图片**/
- function drawPic() {
- var canvas = document.getElementById("canvas");
- var width = canvas.width;
- var height = canvas.height;
- var ctx = canvas.getContext('2d');
- ctx.textBaseline = 'bottom';
-
- /**绘制背景色**/
- ctx.fillStyle = randomColor(180, 240); //颜色若太深可能导致看不清
- ctx.fillRect(0, 0, width, height);
- /**绘制文字**/
- var str = 'ABCEFGHJKLMNPQRSTWXY123456789';
- for(var i = 0; i < 4; i++) {
- var txt = str[randomNum(0, str.length)];
- ctx.fillStyle = randomColor(50, 160); //随机生成字体颜色
- ctx.font = randomNum(15, 40) + 'px SimHei'; //随机生成字体大小
- var x = 10 + i * 25;
- var y = randomNum(25, 45);
- var deg = randomNum(-45, 45);
- //修改坐标原点和旋转角度
- ctx.translate(x, y);
- ctx.rotate(deg * Math.PI / 180);
- ctx.fillText(txt, 0, 0);
- //恢复坐标原点和旋转角度
- ctx.rotate(-deg * Math.PI / 180);
- ctx.translate(-x, -y);
- }
- /**绘制干扰线**/
- for(var i = 0; i < 8; i++) {
- ctx.strokeStyle = randomColor(40, 180);
- ctx.beginPath();
- ctx.moveTo(randomNum(0, width), randomNum(0, height));
- ctx.lineTo(randomNum(0, width), randomNum(0, height));
- ctx.stroke();
- }
- /**绘制干扰点**/
- for(var i = 0; i < 100; i++) {
- ctx.fillStyle = randomColor(0, 255);
- ctx.beginPath();
- ctx.arc(randomNum(0, width), randomNum(0, height), 1, 0, 2 * Math.PI);
- ctx.fill();
- }
- }
- </script>
- </body>
-
- </html>
暂时这个
- <html>
- <meta http-equiv="X-UA-Compatible" content="chrome=1">
- <head>
- <script>
- window.onload = function() {
- draw();
- var saveButton = document.getElementById("saveImageBtn");
- bindButtonEvent(saveButton, "click", saveImageInfo);
- var dlButton = document.getElementById("downloadImageBtn");
- bindButtonEvent(dlButton, "click", saveAsLocalImage);
- };
- function draw(){
- var canvas = document.getElementById("thecanvas");
- var ctx = canvas.getContext("2d");
- ctx.fillStyle = "rgba(125, 46, 138, 0.5)";
- ctx.fillRect(25,25,100,100);
- ctx.fillStyle = "rgba( 0, 146, 38, 0.5)";
- ctx.fillRect(58, 74, 125, 100);
- ctx.fillStyle = "rgba( 0, 0, 0, 1)"; // black color
- ctx.fillText("Gloomyfish - Demo", 50, 50);
- }
-
- function bindButtonEvent(element, type, handler)
- {
- if(element.addEventListener) {
- element.addEventListener(type, handler, false);
- } else {
- element.attachEvent('on'+type, handler);
- }
- }
-
- function saveImageInfo ()
- {
- var mycanvas = document.getElementById("thecanvas");
- var image = mycanvas.toDataURL("image/png");
- var w=window.open('about:blank','image from canvas');
- w.document.write("<img src='"+image+"' alt='from canvas'/>");
- }
-
- function saveAsLocalImage () {
- var myCanvas = document.getElementById("thecanvas");
- // here is the most important part because if you dont replace you will get a DOM 18 exception.
- // var image = myCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream;Content-Disposition: attachment;filename=foobar.png");
- var image = myCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
- window.location.href=image; // it will save locally
- }
- </script>
- </head>
- <body bgcolor="#E6E6FA">
- <div>
- <canvas width=200 height=200 id="thecanvas"></canvas>
- <button id="saveImageBtn">Save Image</button>
- <button id="downloadImageBtn">Download Image</button>
- </div>
- </body>
- </html>