当然,这些都是使用了别人的API。而对于开发人员来讲,自己开发一个API也不是什么难事,网上现成的代码有很多。我在网上找了代码然后自己整理了一个小demo。

源码下载地址:http://download.csdn.net/detail/sundenskyqq/3817488

需要引用的jar包:QRCode.jar、commons-fileupload-1.1.1.jar、commons-io-1.2.jar

由于源码较多,这里只贴出主要方法:

生成和解码都需要用到的Img类:

package demo.twoDimensionalCode.comm;
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
public class Img implements QRCodeImage {
BufferedImage image;
public Img(BufferedImage image) {
this.image = image;
}
public int getWidth() {
return image.getWidth();
}
public int getHeight() {
return image.getHeight();
}
public int getPixel(int x, int y) {
return image.getRGB(x, y);
}
}

生成二维码的代码:

Service:

/**
* 流的方式实现生成二维码
*/
public void QRCodeEncoder(OutputStream OS,String imgFormat,String imgShowData,int imgSize) throws Exception {
Qrcode qrcode=new Qrcode();
qrcode.setQrcodeErrorCorrect('M');
qrcode.setQrcodeEncodeMode('B');
qrcode.setQrcodeVersion(7);
StringBuffer sb = new StringBuffer(imgShowData);
String result =sb.toString();
byte [] bt = result.getBytes("utf-8");
BufferedImage bi = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gh2D = bi.createGraphics();
gh2D.setBackground(Color.WHITE);
gh2D.clearRect(0, 0, imgSize, imgSize);
gh2D.setColor(Color.BLACK);
if (bt.length>0){
boolean[][] s = qrcode.calQrcode(bt);
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < s.length; j++) {
if (s[j][i]) {
gh2D.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);
}
}
}
}
gh2D.dispose();
bi.flush();
ImageIO.write(bi, imgFormat, OS);
System.out.println("doned!");
}

Servlet:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
QRCodeEncoderService qrCodeEncoderService=new QRCodeEncoderServiceImp();
String info=request.getParameter("content");
try {
qrCodeEncoderService.QRCodeEncoder(response.getOutputStream(), "jpg", info, 140);
} catch (Exception e) {
}
}

Jsp:

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>二维码生成、解码</title>
</head>
<script type="text/javascript">
function showEWMbtn() {
var ifm = document.getElementById("showEWM");
var content = document.getElementById("content").value;
ifm.src="<%=request.getContextPath()%>/QRCodeImageServlet?content="+content;
}
</script>
</head>
<body>
<h3>生成二维码</h3>
注释:在文本框中输入想要生成二维码的内容,点击按钮即可生成二维码:<br/>
<textarea id="content" ></textarea>
<input type="button" οnclick="showEWMbtn()" value="生成二维码"/>
<iframe id="showEWM" name="showEWM">
</iframe><br/><br/>
</body>
</html>

二维码解码代码:

Service:

public String QRCodeDecoder(InputStream IS){
String decodedData = null;
QRCodeDecoder decoder = new QRCodeDecoder();
BufferedImage image = null;
try {
image = ImageIO.read(IS);
} catch (IOException e) {
System.out.println("Error: "+ e.getMessage());
}
try {
decodedData = new String(decoder.decode(new Img(image)),"utf-8");
System.out.println(decodedData);
} catch (DecodingFailedException dfe) {
System.out.println("Error: " + dfe.getMessage());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return decodedData;
}

Servlet:

/**
* 二维码解码,上传图片方式
* @author dingcy
*
*/
public class QRDecoderServlet  extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
QRCodeDecoderService decoder = new QRCodeDecoderServiceImp();
OutputStream os = response.getOutputStream();
// maximum size before a FileUploadException will be thrown
upload.setSizeMax(1000000);
try {
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
InputStream is = item.getInputStream();
String returnData = decoder.QRCodeDecoder(is);
returnData.getBytes();
os.write(returnData.getBytes());
os.close();
is.close();
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
}

Jsp:

<h3>解码</h3>
<form name="decodeForm" target="decodeFrame" id="decodeForm" method="post"
action="<%=request.getContextPath()%>/QRDecoderServlet" enctype="multipart/form-data">
<input type="file" name="decodeFile"/>
<input type="submit" name="decodeBtn" value="解码" />
</form>
<iframe id="decodeFrame" name="decodeFrame"></iframe>

二维码生成和解码(二)相关推荐

  1. jquery二维码生成插件_二维码生成器

    jquery二维码生成插件_二维码生成器 下载地址:jquery生成二维码.rar 转载于:https://www.cnblogs.com/wifi/articles/3176529.html

  2. 转【微信小程序 四】二维码生成/扫描二维码

    原文:https://blog.csdn.net/xbw12138/article/details/75213274 前端  二维码生成  二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示 ...

  3. 单个视频二维码生成与列表二维码生成(完整版)

    视频二维码有有两种情况:一种是单个视频的生成一个二维码:另一种是一组视频(多个视频)生成一个列表二维码.用户按自己的实际需求生成,即可,很方便. 原创内容,2021-9-16 第一部分:单个视频二维码 ...

  4. 【微信小程序 四】二维码生成/扫描二维码

    前端 二维码生成 二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示的时间加在二维码中,起到刷新的作用,在onshow中每次打开界面就会刷新显示 var QR = require(" ...

  5. c#二维码生成和解码

    文件下载链接 引用包 此方法的解码缺点:只能解此方法生成的二维码 一.生成 : 一般处理程序 public void ProcessRequest(HttpContext context){conte ...

  6. 聚合二维码生成(小程序二维码、付款码)

    1. 付款码 点击前往 2. 小程序二维码 扫码进入小程序 第一步: 配置微信小程序二维码 微信公众平台 >开发 >开发设置 >扫普通链接二维码打开小程序 点击添加,配置二维码规则 ...

  7. simple go web application 二维码生成 打包部署

    go语言简易web应用 & 二维码生成及解码 & 打包部署 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/10801476.html 前言(闲 ...

  8. .NET 二维码生成(ThoughtWorks.QRCode)

    引用ThoughtWorks.QRCode.dll (源代码里有) 1.简单二维码生成及解码代码: //生成二维码方法一private void CreateCode_Simple(string nr ...

  9. 二维码生成及识别接口

    在线二维码生成,在线二维码识别 一.接口介绍 为用户提供在线二维码生成器及其识别功能,其中二维码识别支持Base64.上传图片及复制图片地址识别等方式.广泛应用于宣传海报.简历.餐桌牌同步点餐.二维码 ...

最新文章

  1. 浅析网站优化工作具体包括哪些内容?
  2. Haproxy全透明代理
  3. 【NOIP2013模拟联考6】选课(select)
  4. Vue项目中使用svg文件
  5. 在Android中使用FlatBuffers
  6. 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子
  7. Excel VBA利用事件对图表自动更新
  8. 【USACO 1.3】Ski Course Design
  9. WPF界面设计中常用的一些代码片段及属性
  10. AsyncTask--源码心得
  11. 一些网络爱好者常用的网络工具
  12. 台达b2伺服modbus通讯_台达伺服ASDA-B2使用手册-简体最新.pdf
  13. win10主机ping不通win10虚拟机
  14. centos 下 docker 的 安装与使用 (一)
  15. CSS单位:em、rem、%、vh、vw、vmin、vmax
  16. 基于Spring Boot的健身房管理系统设计与实现
  17. 怎么关闭计算机桌面的弹窗,电脑桌面弹出的广告怎么设置关闭
  18. 白平衡之灰度世界算法
  19. TDD和BDD的区别 (TDD vs BDD)
  20. 旧金山大学的算法可视化学习教程 赞的教程,将抽象的算法可视化,易于理解

热门文章

  1. 2020-05-06
  2. 一键式解压tar, tar.gz. tar.bz2, tar.xv文件的shell脚本【转】
  3. 大连工业大学计算机学硕,考研调剂:大连工业大学招收“学硕”调剂研究生一名!...
  4. openmeetings 安装ssl
  5. 【Github】使用github
  6. 【Unity】环境光探究,在shader中如何计算 : Ambient Color, Sky Color, Equator Color, Ground Color
  7. QT 管理win系统服务
  8. 能不能接受五一放一天不调休?专家建议固定法定假期取消调休
  9. 抓包那些事——四大抓包神器简介
  10. 华为hcie中QOS 流量整形 双速率的概念-ielab实验室