手把手教你生成二维码-google.zxing

一、目标

输入网址,生成网址的二维码

二、概况

1.效果:UI丑,但功能实现了

 

2.项目目录

 

三、用到的第三方资源

1.google的扫码包zxing

2.JQuery

四、步骤(用myEclipse)

1.新建工程,选择web project

2.加入第三方资源(zxing包和jQuery)

2.1

2.1.1复制,粘贴,加入zxing的jar包(所有文件在附件中下载)

2.2.2右键jar包加入buildpath

2.2加入jQuery文件

2.2.1在WebRoot下新建文件夹js

复制粘贴jQuery文件到此文件夹

3.按需求修改webroot下的index.jsp页面如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<%@ page language= "java" import = "java.util.*" pageEncoding= "utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ;
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
   <head>
     <base href= "<%=basePath%>" >
     <title>二维码</title>
     <script src= "js/jquery.min.js" ></script>
     <script>
         $(function(){
             $( "input[type=submit]" ).click(function(e){
                 e.preventDefault();
                 $( "#qrcode_div" ).empty().append( "<img id='qrImg' />" );
                 $( "#qrImg" ).attr( "src" , "qrcode?website=" +$( "input[type=text][name=website]" ).val()); //此处会访问servlet
             });
         });
     </script>
   </head>
   
   <body>
     <form>
         网址<input type= "text" name= "website" />
         <input type= "submit" value= "生成二维码" />
         <div id= "qrcode_div" ></div>
     </form>
   </body>
</html>

4.新建servlet文件

4.1右键工程文件夹--》new ---->servlet(myEclipse会自动配置servlet到web.xml文件)

QRCode.java servlet文件的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package servlet;
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import util.QRCodeUtil;
 
import com.google.zxing.WriterException;
 
 
public class QRCode extends HttpServlet {
     
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         
         request.setCharacterEncoding( "utf-8" );
         response.setCharacterEncoding( "utf-8" );
         String website = request.getParameter( "website" );
         try {
             QRCodeUtil.genGR(website, response.getOutputStream());
         } catch (WriterException e) {
             e.printStackTrace();
         }
         //String website = request.getAttribute("website").toString();
     }
 
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         doGet(request, response);
     }
 
}

5.新建辅助类文件,作用是生成二维码(QRCodeUtil.java)

5.1右键工程文件夹--》new--->class,如下图

 

QRCodeUtil.java的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package util2;
 
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Hashtable;
 
import javax.imageio.ImageIO;
 
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
 
public class QRCodeUtil {
     
     private static final int BLACK = 0xFF000000 ;
     private static final int WHITE = 0xFFFFFFFF ;
     
     public static void genGR(String website, OutputStream output) throws WriterException, IOException {
         int width = 300 ;
         int height = 300 ;
         String format = "jpg" ;
         Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
         //Hashtable hints = new Hashtable();
         hints.put(EncodeHintType.CHARACTER_SET, "utf-8" );
         BitMatrix bm = new MultiFormatWriter().encode(website, BarcodeFormat.QR_CODE, width, height, hints);
         
         BufferedImage image = toImage(bm);
         ImageIO.write(image, format, output);   //把二维码写到response的输出流
     }
 
     private static BufferedImage toImage(BitMatrix bm) {
         int width = bm.getWidth();
         int height = bm.getHeight();
         BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
         for ( int x = 0 ;x < width; x++){
             for ( int y = 0 ; y < height; y++ ){
                 image.setRGB(x, y, bm.get(x, y) ? BLACK : WHITE);
             }
         }
         return image;
     }
 
}

6.至此,所有文件已完成,接下来布置项目,启动tomcat,访问文件,如下图

布置完成后,点击debug启动项目

启动成功后,在浏览器中访问文件

PS:

可以修改QRCodeUtil.java文件中的颜色配置,以生成彩色的二维码,例如:

private static final int BLACK = 0xff0000ff;//0xFF000000;
private static final int WHITE = 0xffffff00;//0xFFFFFFFF;

常见颜色代码如下:

这些颜色常数是定义在android.graphics.Color里的:

类型

常数

色码

int

BLACK

-16777216

0xff000000

int

BLUE

-16776961

0xff0000ff

int

CYAN

-16711681

0xff00ffff

int

DKGRAY

-12303292

0xff444444

int

GRAY

-7829368

0xff888888

int

GREEN

-16711936

0xff00ff00

int

LTGRAY

-3355444

0xffcccccc

int

MAGENTA

-65281

0xffff00ff

int

RED

-65536

0xffff0000

int

TRANSPARENT

0

0x00000000

int

WHITE

-1

0xffffffff

int

YELLOW

-256

0xffffff00

 

项目附件:

http://files.cnblogs.com/files/shamgod/QRCode.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值