Java利用QR Code生成二维码(二)
来源:互联网 发布:淘宝卖家ipad客户端 编辑:程序博客网 时间:2024/06/05 19:12
jar包下载地址:链接:http://pan.baidu.com/s/1miC2gCK 密码:wp35
package example;import java.awt.image.BufferedImage;import jp.sourceforge.qrcode.data.QRCodeImage;/** * * @author Administrator * */public class QRCodeImageImpl implements QRCodeImage {BufferedImage bufImg;public QRCodeImageImpl(BufferedImage bufImg) {this.bufImg = bufImg;}@Overridepublic int getHeight() {return bufImg.getHeight();}@Overridepublic int getPixel(int x, int y) {return bufImg.getRGB(x, y);}@Overridepublic int getWidth() {return bufImg.getWidth();}}
package example;import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.imageio.ImageIO;import jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.exception.DecodingFailedException;import com.swetake.util.Qrcode;/** * 二维码工具类 */public class QRCodeTool {/** * * 生成二维码(QRCode)图片 * * @param content * 存储内容 * @param imgPath * 图片路径 * @param imgLogoPath * 图片logo路径 */public static void encoderQRCode(String content, String imgPath,String imgLogoPath) {encoderQRCode(content, imgPath, "png", 2, imgLogoPath);}/** * * 生成二维码(QRCode)图片 * * @param content * 存储内容 * @param output * 输出流 * @param imgLogoPath * 图片logo路径 */public static void encoderQRCode(String content, OutputStream output,String imgLogoPath) {encoderQRCode(content, output, "png", 2, imgLogoPath);}/** * * 生成二维码(QRCode)图片 * * @param content * 存储内容 * @param imgPath * 图片路径 * @param imgType * 图片类型 * @param imgLogoPath * 图片logo路径 */public static void encoderQRCode(String content, String imgPath,String imgType, String imgLogoPath) {encoderQRCode(content, imgPath, imgType, 2, imgLogoPath);}/** * * 生成二维码(QRCode)图片 * * @param content * 存储内容 * @param output * 输出流 * @param imgType * 图片类型 * @param imgLogoPath * 图片logo路径 */public static void encoderQRCode(String content, OutputStream output,String imgType, String imgLogoPath) {encoderQRCode(content, output, imgType, 2, imgLogoPath);}/** * * 生成二维码(QRCode)图片 * * @param content * 存储内容 * @param imgPath * 图片路径 * @param imgType * 图片类型 * @param size * 二维码尺寸 * @param imgLogoPath * 图片logo路径 */public static void encoderQRCode(String content, String imgPath,String imgType, int size, String imgLogoPath) {try {BufferedImage bufImg = qRCodeCommon(content, imgType, size,imgLogoPath);File imgFile = new File(imgPath);// 生成二维码QRCode图片ImageIO.write(bufImg, imgType, imgFile);} catch (Exception e) {e.printStackTrace();}}/** * 生成二维码(QRCode)图片 * * @param content * 存储内容 * @param output * 输出流 * @param imgType * 图片类型 * @param size * 二维码尺寸 * @param imgLogoPath * 图片logo路径 */public static void encoderQRCode(String content, OutputStream output,String imgType, int size, String imgLogoPath) {try {BufferedImage bufImg = qRCodeCommon(content, imgType, size,imgLogoPath);// 生成二维码QRCode图片ImageIO.write(bufImg, imgType, output);} catch (Exception e) {e.printStackTrace();}}/** * 生成二维码(QRCode)图片的公共方法 * * @param content * 存储内容 * @param imgType * 图片类型 * @param size * 二维码尺寸 * @param imgLogoPath * 图片logo路径 * @return */private static BufferedImage qRCodeCommon(String content, String imgType,int size, String imgLogoPath) {BufferedImage bufImg = null;size = 10;try {Qrcode qrcodeHandler = new Qrcode();// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小qrcodeHandler.setQrcodeErrorCorrect('M');qrcodeHandler.setQrcodeEncodeMode('B');// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大qrcodeHandler.setQrcodeVersion(size);// 获得内容的字节数组,设置编码格式byte[] contentBytes = content.getBytes("utf-8");// 图片尺寸// int imgSize = 67 + 12 * (size - 1);int imgSize = 67 + 12 * (size - 1);// System.out.println(imgSize);bufImg = new BufferedImage(imgSize, imgSize,BufferedImage.TYPE_INT_RGB);Graphics2D gs = bufImg.createGraphics();// 设置背景颜色gs.setBackground(Color.WHITE);gs.clearRect(0, 0, imgSize, imgSize);// 设定图像颜色 > BLACKgs.setColor(Color.BLACK);// 设置偏移量,不设置可能导致解析出错int pixoff = 2;// 输出内容> 二维码if (contentBytes.length > 0 && contentBytes.length < 800) {boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);for (int i = 0; i < codeOut.length; i++) {for (int j = 0; j < codeOut.length; j++) {if (codeOut[j][i]) {gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);}}}} else {throw new Exception("QRCode content bytes length = "+ contentBytes.length + " not in [0, 800].");}if (imgLogoPath != null) {Image img = ImageIO.read(new File(imgLogoPath));gs.drawImage(img, bufImg.getWidth() / 4 + bufImg.getHeight()/ 2, bufImg.getHeight() / 4 + bufImg.getHeight() / 2,bufImg.getWidth() / 4, bufImg.getHeight() / 4, null);}gs.dispose();bufImg.flush();} catch (Exception e) {e.printStackTrace();}return bufImg;}/** * 解析二维码(QRCode) * * @param imgPath * 图片路径 * @return */public static String decoderQRCode(String imgPath) throws Exception {// QRCode 二维码图片的文件File imageFile = new File(imgPath);BufferedImage bufImg = null;String content = null;try {bufImg = ImageIO.read(imageFile);QRCodeDecoder decoder = new QRCodeDecoder();content = new String(decoder.decode(new QRCodeImageImpl(bufImg)),"utf-8");} catch (IOException e) {// System.out.println("Error: " + e.getMessage());// e.printStackTrace();} catch (DecodingFailedException dfe) {// System.out.println("Error: " + dfe.getMessage());// dfe.printStackTrace();}return content;}/** * 解析二维码(QRCode) * * @param input * 输入流 * @return */public static String decoderQRCode(InputStream input) {BufferedImage bufImg = null;String content = null;try {bufImg = ImageIO.read(input);QRCodeDecoder decoder = new QRCodeDecoder();content = new String(decoder.decode(new QRCodeImageImpl(bufImg)),"utf-8");} catch (IOException e) {System.out.println("Error: " + e.getMessage());e.printStackTrace();} catch (DecodingFailedException dfe) {System.out.println("Error: " + dfe.getMessage());dfe.printStackTrace();}return content;}}
package example;public class Test {@SuppressWarnings("static-access")public static void main(String[] args) throws Exception {String imgPath = "file/QRcode.png";String encoderContent = "http://www.baidu.com";QRCodeTool handler = new QRCodeTool();handler.encoderQRCode(encoderContent, imgPath, "file/Baidu.png");// try {// OutputStream output = new FileOutputStream(imgPath);// handler.encoderQRCode(encoderContent, output, "file/Baidu.png");// } catch (Exception e) {// e.printStackTrace();// }System.out.println("======编码成功======");// String decoderContent = handler.decoderQRCode(imgPath);System.out.println("解析结果如下:");// System.out.println(decoderContent);System.out.println("======解码成功======");}}
百度logo
运行结果如下:
0 0
- Java利用QR Code生成二维码(二)
- Java利用QR Code生成二维码(一)
- PHP 【利用二维码生成库 PHP QR Code 生成二维码】
- PHP利用PHP QR Code二维码类生成二维码
- php利用PHP QR Code生成二维码(带logo)
- 【转载】php利用PHP QR Code生成二维码(带logo)
- PHP QR Code生成二维码
- HP QR Code 生成二维码
- PHP QR Code 生成二维码
- PHP QR Code生成二维码
- PHP QR Code生成二维码
- 【笔记(1)】PHP QR Code生成二维码
- php生成二维码 (类库PHP QR Code)
- 二维码(QR code)基本结构及生成原理
- 二维码(QR code)基本结构及生成原理
- 使用ZXing.Net生成与识别二维码(QR Code)
- iOS 二维码(QR Code)
- PHP通过PHP QR Code生成二维码
- 将linux文件中的tab更换为空格的三种方法2010-08-09 15:50:36
- Spring定时任务的几种实现
- 补2
- HTML5 文件上传的2种方式
- java.util.ConcurrentModificationException 解决办法(使用迭代器时出现异常)
- Java利用QR Code生成二维码(二)
- SNTP以win7为服务器的配置
- 一个单链表,将末节点插入到第一个节点后面,并且删除末节点。
- 关于Tomcat单独运行和在eclipse下运行时路径的问题
- Fingerprint CtsOsTestCases fail
- PAT1016. 部分A+B (15)
- 【机器学习】浅谈聚类算法
- SpringMvc国际化
- python tool