通过输入info生成二维码名片
先来看看最后的成品:(测试数据纯属虚构)
下面拿起你的手机开启微信扫一扫,看看能扫到什么...
其实要想实现这个效果并不难,
下面就是几个重要的实现过程:
1.项目是java web project,项目结构如下(需要导入第三方jar包:Qrcode.jar,这个包用来画对应的二维码):
2.index.jsp(这里只贴核心处理代码):
1 <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script> 2 <script type="text/javascript"> 3 $(function(){ 4 //设置点击事件 5 $("#b_btn").click(function(){ 6 //定义各变量 7 var name="",company="",job="",address="",phone="",email="",web="",desc="",info=""; 8 if($("#name").val().trim().length > 0){ 9 name="FN:"+$("#name").val()+"\n"; //name必须对应FN,company必须对应ORG ...同时各变量需要换行 10 } 11 if($("#company").val().trim().length > 0){ 12 company="ORG:"+$("#company").val()+"\n"; 13 } 14 if($("#job").val().trim().length > 0){ 15 job="TITLE:"+$("#job").val()+"\n"; 16 } 17 if($("#address").val().trim().length > 0){ 18 address="ADR;WORK:"+$("#address").val()+"\n"; 19 } 20 if($("#phone").val().trim().length > 0){ 21 phone="TEL;WORK:"+$("#phone").val()+"\n"; 22 } 23 if($("#email").val().trim().length > 0){ 24 email="EMAIL;WORK:"+$("#email").val()+"\n"; 25 } 26 if($("#web").val().trim().length > 0){ 27 web="URL:"+$("#web").val()+"\n"; 28 } 29 if($("#desc").val().trim().length > 0){ 30 desc="NOTE:"+$("#desc").val()+"\n"; 31 } 32 //info参数规定的格式:以BEGIN:VCARD开始,以END:VCARD结束,各参数之间必须要换行 33 info="BEGIN:VCARD\n"+name+company+job+address+phone+email+web+desc+info+"END:VCARD"; 34 35 $.ajax({ 36 type:"post", 37 url:"data.jsp", 38 //传递content参数,值为info 39 data:{content:info}, 40 //处理成功返回值data=data.jsp中写回的fileName 41 success:function(data){ 42 $(".b_qrcode").html("<img src='"+data+"' width='235' height='235' class='animated rollIn'>"); 43 }, 44 }); 45 }); 46 }); 47 </script>
3.data.jsp:
1 <%@ page language="java" import="com.tz.util.QrcodeImg"%> 2 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 3 4 <% 5 request.setCharacterEncoding("utf-8"); 6 //获取传递过来的info参数 7 String content = request.getParameter("content"); 8 //生成的二维码图片名称,加上时间戳确保每张图片不重名 9 String fileName = "Allen_"+new Date().getTime()+".png"; 10 //获取生成图片的存放路径 11 String imgPath = getServletContext().getRealPath("/")+"/"+fileName; 12 //调用方法,根据提供的info信息画二维码名片 13 QrcodeImg.getQrcodedImg(content, imgPath); 14 //写回 15 out.write(fileName); 16 %>
4.QrcodeImg.java
1 package com.tz.util; 2 3 import java.awt.Color; 4 import java.awt.Graphics2D; 5 import java.awt.image.BufferedImage; 6 import java.io.File; 7 import java.io.UnsupportedEncodingException; 8 9 import javax.imageio.ImageIO; 10 11 import sun.management.snmp.jvminstr.JvmThreadInstanceEntryImpl.ThreadStateMap.Byte0; 12 13 import com.swetake.util.Qrcode; 14 15 /** 16 * java生成二维码 17 * @author Allen 18 * @version 1.0 19 */ 20 public class QrcodeImg { 21 /** 22 * 获取二维码 23 * @param content 二维码内容 24 * @param imgPath 二维码存放路径 25 * @return void 26 */ 27 public static void getQrcodedImg(String content,String imgPath){ 28 29 int width=235; 30 int height=235; 31 32 //实例化一个Qrcode 33 Qrcode qc = new Qrcode(); 34 35 //排错率L7% M15% Q25% H30% 排错率越高有用的东西就越少,比如二维码中间的图片 36 qc.setQrcodeErrorCorrect('M'); 37 38 //编码方式N A B K 数字、英文、二进制、中文 39 qc.setQrcodeEncodeMode('B'); 40 41 //二维码版本 42 qc.setQrcodeVersion(15); 43 44 //准备画二维码 45 BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); 46 //创建画笔 47 Graphics2D gs = image.createGraphics(); 48 //设置背景为白色 49 gs.setBackground(Color.WHITE); 50 //创建一个画二维码的区域 51 gs.clearRect(0, 0, width, height); 52 //设置画内容的颜色为黑色 53 gs.setColor(Color.BLACK); 54 55 //开始处理信息,画二维码 56 byte[] codeOut; 57 try { 58 //通过内容获得byte数组 59 codeOut = content.getBytes("utf-8"); 60 //通过byte数组获得布尔类型的数组 61 boolean[][] code = qc.calQrcode(codeOut); 62 //循环数组判断值 63 for(int i=0;i<code.length;i++){ 64 for(int j=0;j<code.length;j++){ 65 if(code[j][i]){ 66 //如果为真就画为黑色 67 gs.fillRect(j*3+2, i*3+2, 3, 3); 68 } 69 } 70 } 71 72 //释放资源 73 gs.dispose(); 74 image.flush(); 75 76 //写入 77 ImageIO.write(image, "png", new File(imgPath)); 78 System.out.println("二维码生成成功!"+content); 79 80 } catch (Exception e) { 81 // TODO Auto-generated catch block 82 e.printStackTrace(); 83 } 84 } 85 86 public static void main(String[] args){ 87 //test 88 } 89 }