java生成二维码

转载处:http://blog.youkuaiyun.com/pxr1989104/article/details/51283585

1、二维码的生成

   1.1 将Zxing-core.jar 包加入到classpath下。

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

package com.phome.demo;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import com.google.zxing.common.BitMatrix;

public final class MatrixToImageWriter {
	private static final int BLACK = 0xFF000000;
	   private static final int WHITE = 0xFFFFFFFF;
	 
	   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 = 0; x < width; x++) {
	       for (int y = 0; 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);
	     }
	   }
}
2、生成二维码

package com.phome.demo;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
public class Ewm {
	public static void main(String[] args) {
		try {
            
		     String content = "http://blog.youkuaiyun.com/u013804636";
		     String path = "C:\\Users\\Administartor\\Desktop\\testImage";
		     
		     MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
		     
		     Map hints = new HashMap();
		     hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		     BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400,hints);
		     File file1 = new File(path,"1.jpg");
		     MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);
		     
		 } catch (Exception e) {
		     e.printStackTrace();
		 }
	}
}
3、解析二维码

package com.phome.demo;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

import com.google.zxing.LuminanceSource;

public final class BufferedImageLuminanceSource extends LuminanceSource{

	private final BufferedImage image;
	   private final int left;
	   private final int top;
	 
	   public BufferedImageLuminanceSource(BufferedImage image) {
	     this(image, 0, 0, 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) & 0xFF000000) == 0) {
	           image.setRGB(x, y, 0xFFFFFFFF); // = white
	         }
	       }
	     }
	 
	     this.image = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_BYTE_GRAY);
	     this.image.getGraphics().drawImage(image, 0, 0, null);
	     this.left = left;
	     this.top = top;
	   }
	 
	   @Override
	   public byte[] getRow(int y, byte[] row) {
	     if (y < 0 || 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, 1, 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(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth);
	 
	     BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, BufferedImage.TYPE_BYTE_GRAY);
	 
	     Graphics2D g = rotatedImage.createGraphics();
	     g.drawImage(image, transform, null);
	     g.dispose();
	 
	     int width = getWidth();
	     return new BufferedImageLuminanceSource(rotatedImage, top, sourceWidth - (left + width), getHeight(), width);
	   }

}


package com.phome.demo;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;

import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;

public class REwm {
	public static void main(String[] args) {
		try {
            MultiFormatReader formatReader = new MultiFormatReader();
			String filePath = "C:\\Users\\Administartor\\Desktop\\testImage\\2.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-8");
			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();
			}
	}
}





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值