知识大全 Java利用Zxing生成二维码

Posted

篇首语:一锹挖不成水井,一天盖不成罗马城。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java利用Zxing生成二维码相关的知识,希望对你有一定的参考价值。

Java利用Zxing生成二维码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Java利用Zxing生成二维码

  Zxing是Google提供的关于条码(一维码 二维码)的解析工具 提供了二维码的生成与解析的方法 现在我简单介绍一下使用Java利用Zxing生成与解析二维码

   二维码的生成

   将Zxing core jar 包加入到classpath下

   二维码的生成需要借助MatrixToImageWriter类 该类是由Google提供的 可以将该类拷贝到源码中 这里我将该类的源码贴上 可以直接使用

  import mon BitMatrix;

  import javax imageio ImageIO;

  import java io File;

  import java io OutputStream;

  import java io IOException;

  import java awt image BufferedImage;

  public final class MatrixToImageWriter

  private static final int BLACK = xFF ;

  private static final int WHITE = xFFFFFFFF;

  private MatrixToImageWriter()

  public static BufferedImage toBufferedImage(BitMatrix matrix)

  int width = matrix getWidth();

  int height = matrix getHeight();

  BufferedImage image = new BufferedImage(width height BufferedImage TYPE_INT_RGB);

  for (int x = ; x < width; x++)

  for (int y = ; y < height; y++)

  image setRGB(x y matrix get(x y) ? BLACK : WHITE);

  

  

  return image;

  

  public static void writeToFile(BitMatrix matrix String format File file)

  throws IOException

  BufferedImage image = toBufferedImage(matrix);

  if (!ImageIO write(image format file))

  throw new IOException( Could not write an image of format + format + to + file);

  

  

  public static void writeToStream(BitMatrix matrix String format OutputStream stream)

  throws IOException

  BufferedImage image = toBufferedImage(matrix);

  if (!ImageIO write(image format stream))

  throw new IOException( Could not write an image of format + format);

  

  

  

   编写生成二维码的实现代码

  try

  String content = /jtmjx ;

  String path = C:/Users/Administrator/Desktop/testImage ;

  MultiFormatWriter multiFormatWriter = new MultiFormatWriter();

  Map hints = new HashMap();

  hints put(EncodeHintType CHARACTER_SET UTF );

  BitMatrix bitMatrix = multiFormatWriter encode(content BarcodeFormat QR_CODE hints);

  File file = new File(path 餐巾纸 jpg );

  MatrixToImageWriter writeToFile(bitMatrix jpg file );

   catch (Exception e)

  e printStackTrace();

  

  现在运行后即可生成一张二维码图片 是不是很简单啊? 接下来我们看看如何解析二维码

   二维码的解析

   将Zxing core jar 包加入到classpath下

   和生成一样 我们需要一个辅助类( BufferedImageLuminanceSource) 同样该类Google也提供了 这里我同样将该类的源码贴出来 可以直接拷贝使用个 省去查找的麻烦

  BufferedImageLuminanceSource

  import google zxing LuminanceSource;

  import java awt Graphics D;

  import java awt geom AffineTransform;

  import java awt image BufferedImage;

  public final class BufferedImageLuminanceSource extends LuminanceSource

  private final BufferedImage image;

  private final int left;

  private final int top;

  public BufferedImageLuminanceSource(BufferedImage image)

  this(image image getWidth() image getHeight());

  

  public BufferedImageLuminanceSource(BufferedImage image int left int top int width int height)

  super(width height);

  int sourceWidth = image getWidth();

  int sourceHeight = image getHeight();

  if (left + width > sourceWidth || top + height > sourceHeight)

  throw new IllegalArgumentException( Crop rectangle does not fit within image data );

  

  for (int y = top; y < top + height; y++)

  for (int x = left; x < left + width; x++)

  if ((image getRGB(x y) & xFF ) == )

  image setRGB(x y xFFFFFFFF); // = white

  

  

  

  this image = new BufferedImage(sourceWidth sourceHeight BufferedImage TYPE_BYTE_GRAY);

  this image getGraphics() drawImage(image null);

  this left = left;

  this top = top;

  

  @Override

  public byte[] getRow(int y byte[] row)

  if (y < || y >= getHeight())

  throw new IllegalArgumentException( Requested row is outside the image: + y);

  

  int width = getWidth();

  if (row == null || row length < width)

  row = new byte[width];

  

  image getRaster() getDataElements(left top + y width row);

  return row;

  

  @Override

  public byte[] getMatrix()

  int width = getWidth();

  int height = getHeight();

  int area = width * height;

  byte[] matrix = new byte[area];

  image getRaster() getDataElements(left top width height matrix);

  return matrix;

  

  @Override

  public boolean isCropSupported()

  return true;

  

  @Override

  public LuminanceSource crop(int left int top int width int height)

  return new BufferedImageLuminanceSource(image this left + left this top + top width height);

  

  @Override

  public boolean isRotateSupported()

  return true;

  

  @Override

  public LuminanceSource rotateCounterClockwise()

  int sourceWidth = image getWidth();

  int sourceHeight = image getHeight();

  AffineTransform transform = new AffineTransform( sourceWidth);

  BufferedImage rotatedImage = new BufferedImage(sourceHeight sourceWidth BufferedImage TYPE_BYTE_GRAY);

  Graphics D g = rotatedImage createGraphics();

  g drawImage(image transform null);

  g dispose();

  int width = getWidth();

  return new BufferedImageLuminanceSource(rotatedImage top sourceWidth (left + width) getHeight() width);

  

  

   编写解析二维码的实现代码

  try

  MultiFormatReader formatReader = new MultiFormatReader();

  String filePath = C:/Users/Administrator/Desktop/testImage/test jpg ;

  File file = new File(filePath);

  BufferedImage image = ImageIO read(file);;

  LuminanceSource source = new BufferedImageLuminanceSource(image);

  Binarizer  binarizer = new HybridBinarizer(source);

  BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

  Map hints = new HashMap();

  hints put(EncodeHintType CHARACTER_SET UTF );

  Result result = formatReader decode(binaryBitmap hints);

  System out println( result = + result toString());

  System out println( resultFormat = + result getBarcodeFormat());

  System out println( resultText = + result getText());

   catch (Exception e)

  e printStackTrace();

  

cha138/Article/program/Java/hx/201311/25967

相关参考

知识大全 怎样做二维码电子名片?

怎样做二维码电子名片?1、百度搜索“二维码在线生成器”2、点击截图所示的二维码在线生成器,进入二维码在线生成器页面。3、二维码生成器中可以制作很多类型的二维码。如果要制作网址二维码就在类型选择框中选择

知识大全 用ASP生成二维饼图

实例应用:用ASP生成二维饼图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <%

知识大全 java性能优化-之一

  .对象的生成和大小的调整  JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数从而常常会生成大量的对象(或实例)由于系统不仅要花时间生成对象以后可能还需花时间对这些对象进

知识大全 用Java来显示图片生成器

用Java来显示图片生成器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一本图片生成器具有以下

知识大全 JAVA生成JPG缩略图

JAVA生成JPG缩略图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在任何一个综合性网站我们

知识大全 用Java代码生成打印收据

用Java代码生成打印收据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先来看看效果如下图 

知识大全 java抓取网页内容--生成静态页面

    privatestaticStringgetStaticPage(Stringsurl)  StringContent=;  try  javaioInputStreaminputStream

知识大全 为测试 Java 应用程序生成证书链

为测试Java应用程序生成证书链  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  学习如何创建数字

知识大全 使用java生成excel功能实现

  jsp页面  发送请求地址sp_createExceldo  publicStringcreateExcel() try  HttpServletResponsere

知识大全 java唯一的字符串生成器

  publicclassUniqueStringGenerator    privateUniqueStringGenerator()      publicstaticsynchronizedSt