通过输入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 }

 

posted @ 2015-09-26 23:50  惟吾德馨‘  阅读(1093)  评论(4编辑  收藏  举报