您的位置:首页 > 编程语言 > PHP开发

项目ITP(一) 二维码

2014-04-27 00:06 381 查看

前言

  系列文章:[传送门]

  上几周碌碌无为,不行啊不行啊。博客园,不知道你几时改版。老家了,我不会忘记你呢。呵呵,我也会在os,csdn更新的。每天一搏,不管有用没用。

正文

  正文先有项目起步,项目中的需求很明确。

    利用二维码扫描,然后实现签到功能。

  自然和app挂钩。 没事,一步一步来。

二维码

  二维码(QR(Quick Response)code),又称二维条码,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙

  


利用工具-zxing

  ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码

  大家可以去了解

  https://github.com/zxing/zxing/wiki/Getting-Started-Developing

二维码(QRCode)的生成

  /**
* 生成二维码图片
* @param content        内容
* @param width          宽度
* @param height         高度
* @param imgPath        存储图片路径
*/


package sedion.jeffli.wmuitp.util.zxing;

import java.io.File;
import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
* @author Jeff Lee
*/
public class ZxingEncoderHelper
{

/**
* 生成二维码图片
* @param content        内容
* @param width          宽度
* @param height         高度
* @param imgPath        存储图片路径
*/
public void encode(String content, int width, int height, String imgPath)
{

Hashtable<EncodeHintType, Object> hts = new Hashtable<EncodeHintType, Object>();
hts.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);                // 纠错等级
hts.put(EncodeHintType.CHARACTER_SET, "utf-8");                                  // 指定编码格式为UTF-8

try
{

BitMatrix bitMatrix = new MultiFormatWriter().encode(content,                //编码内容,编码类型(这里指定为二维码),
BarcodeFormat.QR_CODE, width, height, hts);                          //图片宽度,图片高度,设置参数

MatrixToImageWriter
.writeToFile(bitMatrix, "png", new File(imgPath));                    //生成的二维码图片

}
catch (Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
String imgPath = "d:/33.png";
String contents = "你好!我的博客:http://www.cnblogs.com/Alandre/";
int width = 300, height = 300;
ZxingEncoderHelper handler = new ZxingEncoderHelper();
handler.encode(contents, width, height, imgPath);
}
}


#BitMatrix 设置参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数

#MatrixToImageWriter 生成所需要的文件

你会找到这个图片

  


 

二维码(QRCode)的解码

  

  /**
* 解码
* @param imgPath        二维码图片路径
* @return
*/


package sedion.jeffli.wmuitp.util.zxing;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Hashtable;

import javax.imageio.ImageIO;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

/**
* @author Jeff Lee
*/
public class ZxingDecoderHandler
{

/**
* 解码
* @param imgPath        二维码图片路径
* @return
*/
public String decode(String imgPath)
{

BufferedImage image = null;
Result result = null;

try
{
image = ImageIO.read(new File(imgPath));
if (image == null)
{
System.out.println("文件不存在!");                                //应该抛个异常的
}

LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, "utf-8");

result = new MultiFormatReader().decode(bitmap, hints);
return result.getText();
}
catch (Exception e)
{
e.printStackTrace();
}

return null;
}

public static void main(String[] args)
{
String imgPath = "d:/33.png";

ZxingDecoderHandler handler = new ZxingDecoderHandler();
String content = handler.decode(imgPath);

System.out.println("内容如下:");
System.out.println(content);
}
}


#和生成的相反

   

总结

  二维码生成

  二维码解码

感谢及资源共享

    





    路上走来一步一个脚印,希望大家和我一起。

    感谢读者!很喜欢你们给我的支持。如果支持,点个赞。

    知识来源: https://github.com/zxing/zxing/wiki/Getting-Started-Developing
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: