package zjpt.zwsm.utils; import com.google.zxing.*; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; public class QrBarCode { private static final String CODE = "utf-8"; private static final int BLACK = 0xff000000; private static final int WHITE = 0xFFFFFFFF; /** * 生成RQ二维码 * * @param str 内容 * @param height 高度(px) * @author wuhongbo */ public static BufferedImage getRQ(String str, Integer height) { if (height == null || height < 100) { height = 200; } try { // 文字编码 Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, CODE); BitMatrix bitMatrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, height, height, hints); return toBufferedImage(bitMatrix); // 输出方式 // 网页 // ImageIO.write(image, "png", response.getOutputStream()); // 文件 // ImageIO.write(image, "png", file); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 生成一维码(128) * * @param str * @param width * @param height * @return * @author wuhongbo */ public static BufferedImage getBarcode(String str, Integer width, Integer height) { if (width == null || width < 200) { width = 200; } if (height == null || height < 50) { height = 50; } try { // 文字编码 Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, CODE); BitMatrix bitMatrix = new MultiFormatWriter().encode(str, BarcodeFormat.CODE_128, width, height, hints); return toBufferedImage(bitMatrix); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 生成二维码,写到文件中 * * @param str * @param height * @param file * @throws IOException * @author wuhongbo */ public static void getQRWriteFile(String str, Integer height, File file) throws IOException { BufferedImage image = getRQ(str, height); ImageIO.write(image, "png", file); } /** * 生成一维码,写到文件中 * * @param str * @param height * @param file * @throws IOException * @author wuhongbo */ public static void getBarcodeWriteFile(String str, Integer width, Integer height, File file) throws IOException { BufferedImage image = getBarcode(str, width, height); ImageIO.write(image, "png", file); } /** * 转换成图片 * * @param matrix * @return * @author wuhongbo */ private static BufferedImage toBufferedImage(BitMatrix matrix) { int width = matrix.getWidth(); int height = matrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 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 String read(File file) { BufferedImage image; try { if (file == null || file.exists() == false) { throw new Exception(" File not found:" + file.getPath()); } image = ImageIO.read(file); LuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result; // 解码设置编码方式为:utf-8, Hashtable hints = new Hashtable(); 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) throws Exception { File file = new File("D://test.png"); // 生成二维码 //QRUtil.getQRWriteFile("http://www.baid.com", 200, file); // 生成一维码 QrBarCode.getBarcodeWriteFile("6940577300018", null, null, file); System.out.println("-----成生成功----"); System.out.println(); // 解析生成的图片 String jxr = QrBarCode.read(file); System.out.println("-----解析成功----"); System.out.println(jxr); } }
JAVA 生成条码(一维码)及二维码
猜你喜欢
转载自gqsunrise.iteye.com/blog/2307314
今日推荐
周排行