手把手教你生成二维码-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页面如下:
<%@ 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文件的代码如下:
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的代码如下:
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
手把手教你生成二维码-google.zxing的更多相关文章
- Java生成带小图标的二维码-google zxing 工具类
近期一直忙于开发微信商城项目,应客户要求,要开发个有图标的二维码.经过两次改版,终于实现了该功能(第一次没有小图标,这次才整合好的),如下是完整代码 . 该代码使用Java7开发,另外使用 core- ...
- 使用PHP生成二维码的两种方法(带logo图像)
一.利用Google API生成二维码 Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 简单的 自动生成 二维码 PHP 方法
方法一:<style type="text/css">.eweima{ width:200px; height:200px; margin:auto;}</ ...
- Android利用zxing生成二维码
感谢大佬:https://blog.csdn.net/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhu ...
- Google API在线生成二维码的方法
1.先看一个实例,是用Google API生成西部e网的网站地址www.weste.net二维码的方法: http://chart.apis.google.com/chart?cht=qr&c ...
- 利用google api生成二维码名片例子
二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码.堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1” ...
- 谷歌制图服务(Google Chart)接口生成二维码
Google公布了制图服务(Google Chart)的接口,这项服务用起来相当简单,只使用浏览器就可以用来为统计数据自动生成图片. 目前谷歌制图服务提供折线图.条状图.饼图.Venn图.散点图.二维 ...
- PHP使用google api生成二维码
代码如下: <?php $urlToEncode="nickname:Feanmy,email:feanmy@qq.com"; generateQRfromGoogle($u ...
- Java中使用google.zxing快捷生成二维码(附工具类源码)
移动互联网时代,基于手机端的各种活动扫码和收付款码层出不穷:那我们如何在Java中生成自己想要的二维码呢?下面就来讲讲在Java开发中使用 google.zxing 生成二维码. 一般情况下,Java ...
随机推荐
- saiku3.8二次开发项目搭建(非maven)
参考文章:http://blog.csdn.net/gsying1474/article/details/51603535 本文大部分参考了上面的博文,这里只是做一个记录,由于本人maven能力有限, ...
- HTTP 报文首部
1.HTTP 报文首部 HTTP 协议的请求和响应报文中必定包含 HTTP 首部.首部内容为客户端和服务器分别处理请求和响应提供所需要的信息. 1)HTTP请求报文:在请求中,HTTP报文由方法.UR ...
- Hibernate学习11——配置Hibernate二级缓存
一.缓存的概念: 以空间换时间: 二.Hibernate缓存的分类: 前面我们讲的缓存都是session缓存:也叫一级缓存:get,load等缓存都是内置的,一级缓存: SessionFactor ...
- TimesTen学习(三)安装、连接、远程连接TimesTen数据库
TimesTen学习(三)远程连接TimesTen数据库 <TimesTen学习(一)安装篇>:http://blog.itpub.net/23135684/viewspace-71774 ...
- .NET System.Web.HttpContext.Current.Request报索引超出数组界限。
移动端使用Dio发送 FormData, 请求类型 multipart/form-data, FormData内可以一个或多个包含文件时. 请求接口时获取上传的fomdata数据使用 System.W ...
- python学习 (三十二) 异常处理
1 异常: def exceptionHandling(): try: a = b = d = a / b print(d) except ZeroDivisionError as ex: print ...
- [知识整理]Linux系统WIFI知识的一些整理
前段时间接触了wifi,主要是在linux系统下做预研.开发.本文根据个人收集资料及研究经验做了一些基本入门级别的引子,旨在对wifi有一个很基础的入门的认知,比如知道wifi模块硬件接口有哪些,了解 ...
- PHP编译安装系列
徐亮伟, 江湖人称标杆徐.多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作.擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作. 个人博客"徐亮伟架构师之路&quo ...
- nginx 代理http配置实例
#user nginx; worker_processes ; #error_log /var/log/nginx/error.log warn; #pid /var/run/nginx.pid; e ...
- 如何清除svn的账号缓存信息(solaris)
如果我们不小心输入svn账号错误的话,后面就一直提示认证失败,不能checkout代码. 这个是因为svn把你输入的账号进行了缓存. 如果我们想重新输入新的账号,必须要清除缓存 svn存储账号的目录在 ...