From 1d9eef9a4ba7caebf73b483e0062f9259dbf22a0 Mon Sep 17 00:00:00 2001
From: admin <2780501319@qq.com>
Date: 星期五, 28 二月 2020 15:42:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div

---
 utils/src/main/java/org/yeshi/utils/QRCodeUtil.java |  638 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 360 insertions(+), 278 deletions(-)

diff --git a/utils/src/main/java/org/yeshi/utils/QRCodeUtil.java b/utils/src/main/java/org/yeshi/utils/QRCodeUtil.java
index 292c1d4..8d5ecbc 100644
--- a/utils/src/main/java/org/yeshi/utils/QRCodeUtil.java
+++ b/utils/src/main/java/org/yeshi/utils/QRCodeUtil.java
@@ -1,278 +1,360 @@
-package org.yeshi.utils;
-
-import java.awt.BasicStroke;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Shape;
-import java.awt.geom.RoundRectangle2D;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Hashtable;
-
-import javax.imageio.ImageIO;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.BinaryBitmap;
-import com.google.zxing.DecodeHintType;
-import com.google.zxing.EncodeHintType;
-import com.google.zxing.MultiFormatReader;
-import com.google.zxing.MultiFormatWriter;
-import com.google.zxing.Result;
-import com.google.zxing.WriterException;
-import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
-import com.google.zxing.common.BitMatrix;
-import com.google.zxing.common.HybridBinarizer;
-import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
-
-/**
- * 浜岀淮鐮佺敓鎴�
- * 
- * @author Administrator
- *
- */
-public class QRCodeUtil {
-	private static final String CHARSET = "UTF-8";
-	private static final String FORMAT_NAME = "JPG";
-	// 浜岀淮鐮佸昂瀵�
-	int QRCODE_SIZE = 200;
-	// LOGO瀹藉害
-	int WIDTH = 60;
-	// LOGO楂樺害
-	int HEIGHT = 60;
-
-	static QRCodeUtil qrCodeUtil;
-
-	public static QRCodeUtil getInstance(int size) {
-		if (qrCodeUtil == null) {
-			qrCodeUtil = new QRCodeUtil();
-		}
-		qrCodeUtil.QRCODE_SIZE = size;
-		return qrCodeUtil;
-	}
-
-	public static QRCodeUtil getInstance(int size, int imgSize) {
-		if (qrCodeUtil == null) {
-			qrCodeUtil = new QRCodeUtil();
-		}
-		qrCodeUtil.QRCODE_SIZE = size;
-		qrCodeUtil.HEIGHT = imgSize;
-		qrCodeUtil.WIDTH = imgSize;
-		return qrCodeUtil;
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:31:29
-	 * 
-	 * @param content
-	 *            浜岀淮鐮佸唴瀹�
-	 * @param logoImgPath
-	 *            Logo
-	 * @param needCompress
-	 *            鏄惁鍘嬬缉Logo
-	 * @return 杩斿洖浜岀淮鐮佸浘鐗�
-	 * @throws WriterException
-	 * @throws IOException
-	 *             BufferedImage TODO 鍒涘缓浜岀淮鐮佸浘鐗�
-	 */
-	private BufferedImage createImage(String content, InputStream logoImg, boolean needCompress)
-			throws WriterException, IOException {
-		Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
-		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
-		hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
-		hints.put(EncodeHintType.MARGIN, 1);
-		BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
-				hints);
-		int width = bitMatrix.getWidth();
-		int height = bitMatrix.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, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
-			}
-		}
-		if (logoImg == null) {
-			return image;
-		}
-
-		// 鎻掑叆鍥剧墖
-		insertImage(image, logoImg, needCompress);
-		return image;
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:30:09
-	 * 
-	 * @param source
-	 *            浜岀淮鐮佸浘鐗�
-	 * @param logoImgPath
-	 *            Logo
-	 * @param needCompress
-	 *            鏄惁鍘嬬缉Logo
-	 * @throws IOException
-	 *             void TODO 娣诲姞Logo
-	 */
-	private void insertImage(BufferedImage source, InputStream logoImg, boolean needCompress) throws IOException {
-		Image src = ImageIO.read(logoImg);
-		int width = src.getWidth(null);
-		int height = src.getHeight(null);
-		if (needCompress) { // 鍘嬬缉LOGO
-			if (width > WIDTH) {
-				width = WIDTH;
-			}
-
-			if (height > HEIGHT) {
-				height = HEIGHT;
-			}
-
-			Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
-			BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
-			Graphics g = tag.getGraphics();
-			g.drawImage(image, 0, 0, null); // 缁樺埗缂╁皬鍚庣殑鍥�
-			g.dispose();
-			src = image;
-		}
-
-		// 鎻掑叆LOGO
-		Graphics2D graph = source.createGraphics();
-		int x = (QRCODE_SIZE - width) / 2;
-		int y = (QRCODE_SIZE - height) / 2;
-		graph.drawImage(src, x, y, width, height, null);
-		Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
-		graph.setStroke(new BasicStroke(3f));
-		graph.draw(shape);
-		graph.dispose();
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:32:32
-	 * 
-	 * @param content
-	 *            浜岀淮鐮佸唴瀹�
-	 * @param logoImgPath
-	 *            Logo
-	 * @param destPath
-	 *            浜岀淮鐮佽緭鍑鸿矾寰�
-	 * @param needCompress
-	 *            鏄惁鍘嬬缉Logo
-	 * @throws Exception
-	 *             void TODO 鐢熸垚甯ogo鐨勪簩缁寸爜
-	 */
-	public void encode(String content, InputStream logoImg, String destPath, boolean needCompress) throws Exception {
-		BufferedImage image = createImage(content, logoImg, needCompress);
-		ImageIO.write(image, FORMAT_NAME, new File(destPath));
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:35:44
-	 * 
-	 * @param content
-	 *            浜岀淮鐮佸唴瀹�
-	 * @param destPath
-	 *            浜岀淮鐮佽緭鍑鸿矾寰�
-	 * @throws Exception
-	 *             void TODO 鐢熸垚涓嶅甫Logo鐨勪簩缁寸爜
-	 */
-	public void encode(String content, String destPath) throws Exception {
-		encode(content, null, destPath, false);
-	}
-
-	public InputStream encode(String content) throws Exception {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		encode(content, null, out, false);
-		return new ByteArrayInputStream(out.toByteArray());
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:36:58
-	 * 
-	 * @param content
-	 *            浜岀淮鐮佸唴瀹�
-	 * @param logoImgPath
-	 *            Logo
-	 * @param output
-	 *            杈撳嚭娴�
-	 * @param needCompress
-	 *            鏄惁鍘嬬缉Logo
-	 * @throws Exception
-	 *             void TODO 鐢熸垚甯ogo鐨勪簩缁寸爜锛屽苟杈撳嚭鍒版寚瀹氱殑杈撳嚭娴�
-	 */
-	public void encode(String content, InputStream logoImg, OutputStream output, boolean needCompress)
-			throws Exception {
-		BufferedImage image = createImage(content, logoImg, needCompress);
-		ImageIO.write(image, FORMAT_NAME, output);
-	}
-
-	/**
-	 * 
-	 * @param content
-	 * @param logoImg
-	 * @param output
-	 *            浜岃繘鍒惰緭鍑烘祦
-	 * @param needCompress
-	 * @throws Exception
-	 */
-	public void encode(String content, InputStream logoImg, ByteArrayOutputStream output, boolean needCompress)
-			throws Exception {
-		BufferedImage image = createImage(content, logoImg, needCompress);
-		ImageIO.write(image, FORMAT_NAME, output);
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:38:02
-	 * 
-	 * @param content
-	 *            浜岀淮鐮佸唴瀹�
-	 * @param output
-	 *            杈撳嚭娴�
-	 * @throws Exception
-	 *             void TODO 鐢熸垚涓嶅甫Logo鐨勪簩缁寸爜锛屽苟杈撳嚭鍒版寚瀹氱殑杈撳嚭娴�
-	 */
-	public void encode(String content, OutputStream output) throws Exception {
-		encode(content, null, output, false);
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:39:10
-	 * 
-	 * @param file
-	 *            浜岀淮鐮�
-	 * @return 杩斿洖瑙f瀽寰楀埌鐨勪簩缁寸爜鍐呭
-	 * @throws Exception
-	 *             String TODO 浜岀淮鐮佽В鏋�
-	 */
-	public String decode(File file) throws Exception {
-		BufferedImage image;
-		image = ImageIO.read(file);
-		if (image == null) {
-			return null;
-		}
-		BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
-		BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
-		Result result;
-		Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
-		hints.put(DecodeHintType.CHARACTER_SET, CHARSET);
-		result = new MultiFormatReader().decode(bitmap, hints);
-		String resultStr = result.getText();
-		return resultStr;
-	}
-
-	/**
-	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:39:48
-	 * 
-	 * @param path
-	 *            浜岀淮鐮佸瓨鍌ㄤ綅缃�
-	 * @return 杩斿洖瑙f瀽寰楀埌鐨勪簩缁寸爜鍐呭
-	 * @throws Exception
-	 *             String TODO 浜岀淮鐮佽В鏋�
-	 */
-	public String decode(String path) throws Exception {
-		return decode(new File(path));
-	}
-
-}
+package org.yeshi.utils;
+
+import java.awt.BasicStroke;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Shape;
+import java.awt.geom.RoundRectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Hashtable;
+
+import javax.imageio.ImageIO;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.BinaryBitmap;
+import com.google.zxing.DecodeHintType;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatReader;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.Result;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+/**
+ * 浜岀淮鐮佺敓鎴�
+ * 
+ * @author Administrator
+ *
+ */
+public class QRCodeUtil {
+	private static final String CHARSET = "UTF-8";
+	private static final String FORMAT_NAME = "JPG";
+	// 浜岀淮鐮佸昂瀵�
+	int QRCODE_SIZE = 200;
+	// LOGO瀹藉害
+	int WIDTH = 60;
+	// LOGO楂樺害
+	int HEIGHT = 60;
+
+	static QRCodeUtil qrCodeUtil;
+
+	public static QRCodeUtil getInstance(int size) {
+		if (qrCodeUtil == null) {
+			qrCodeUtil = new QRCodeUtil();
+		}
+		qrCodeUtil.QRCODE_SIZE = size;
+		return qrCodeUtil;
+	}
+
+	public static QRCodeUtil getInstance(int size, int imgSize) {
+		if (qrCodeUtil == null) {
+			qrCodeUtil = new QRCodeUtil();
+		}
+		qrCodeUtil.QRCODE_SIZE = size;
+		qrCodeUtil.HEIGHT = imgSize;
+		qrCodeUtil.WIDTH = imgSize;
+		return qrCodeUtil;
+	}
+
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:31:29
+	 * 
+	 * @param content
+	 *            浜岀淮鐮佸唴瀹�
+	 * @param logoImgPath
+	 *            Logo
+	 * @param needCompress
+	 *            鏄惁鍘嬬缉Logo
+	 * @return 杩斿洖浜岀淮鐮佸浘鐗�
+	 * @throws WriterException
+	 * @throws IOException
+	 *             BufferedImage TODO 鍒涘缓浜岀淮鐮佸浘鐗�
+	 */
+	private BufferedImage createImage(String content, InputStream logoImg, boolean needCompress)
+			throws WriterException, IOException {
+		Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
+		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+		hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
+		hints.put(EncodeHintType.MARGIN, 1);
+		BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
+				hints);
+        
+		int width = bitMatrix.getWidth();
+		int height = bitMatrix.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, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
+			}
+		}
+		if (logoImg == null) {
+			return image;
+		}
+		
+		// 鎻掑叆鍥剧墖
+		insertImage(image, logoImg, needCompress);
+		return image;
+	}
+
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:31:29
+	 * 
+	 * @param content
+	 *            浜岀淮鐮佸唴瀹�
+	 * @param logoImgPath
+	 *            Logo
+	 * @param needCompress
+	 *            鏄惁鍘嬬缉Logo
+	 * @return 杩斿洖浜岀淮鐮佸浘鐗�
+	 * @throws WriterException
+	 * @throws IOException
+	 *             BufferedImage TODO 鍒涘缓浜岀淮鐮佸浘鐗�
+	 */
+	private BufferedImage createImageDeleteWhite(String content, InputStream logoImg, boolean needCompress)
+			throws WriterException, IOException {
+		Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
+		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+		hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
+		hints.put(EncodeHintType.MARGIN, 1);
+		BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
+				hints);
+		
+		//璋冪敤鍘婚櫎鐧借竟鏂规硶
+        bitMatrix = deleteWhite(bitMatrix);
+        
+		int width = bitMatrix.getWidth();
+		int height = bitMatrix.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, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
+			}
+		}
+		if (logoImg == null) {
+			return image;
+		}
+		
+		// 鎻掑叆鍥剧墖
+		insertImage(image, logoImg, needCompress);
+		return image;
+	}
+	
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:30:09
+	 * 
+	 * @param source
+	 *            浜岀淮鐮佸浘鐗�
+	 * @param logoImgPath
+	 *            Logo
+	 * @param needCompress
+	 *            鏄惁鍘嬬缉Logo
+	 * @throws IOException
+	 *             void TODO 娣诲姞Logo
+	 */
+	private void insertImage(BufferedImage source, InputStream logoImg, boolean needCompress) throws IOException {
+		Image src = ImageIO.read(logoImg);
+		int width = src.getWidth(null);
+		int height = src.getHeight(null);
+		if (needCompress) { // 鍘嬬缉LOGO
+			if (width > WIDTH) {
+				width = WIDTH;
+			}
+
+			if (height > HEIGHT) {
+				height = HEIGHT;
+			}
+
+			Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
+			BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+			Graphics g = tag.getGraphics();
+			g.drawImage(image, 0, 0, null); // 缁樺埗缂╁皬鍚庣殑鍥�
+			g.dispose();
+			src = image;
+		}
+
+		// 鎻掑叆LOGO
+		Graphics2D graph = source.createGraphics();
+		int x = (QRCODE_SIZE - width) / 2;
+		int y = (QRCODE_SIZE - height) / 2;
+		graph.drawImage(src, x, y, width, height, null);
+		Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
+		graph.setStroke(new BasicStroke(3f));
+		graph.draw(shape);
+		graph.dispose();
+	}
+
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:32:32
+	 * 
+	 * @param content
+	 *            浜岀淮鐮佸唴瀹�
+	 * @param logoImgPath
+	 *            Logo
+	 * @param destPath
+	 *            浜岀淮鐮佽緭鍑鸿矾寰�
+	 * @param needCompress
+	 *            鏄惁鍘嬬缉Logo
+	 * @throws Exception
+	 *             void TODO 鐢熸垚甯ogo鐨勪簩缁寸爜
+	 */
+	public void encode(String content, InputStream logoImg, String destPath, boolean needCompress) throws Exception {
+		BufferedImage image = createImage(content, logoImg, needCompress);
+		ImageIO.write(image, FORMAT_NAME, new File(destPath));
+	}
+
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:35:44
+	 * 
+	 * @param content
+	 *            浜岀淮鐮佸唴瀹�
+	 * @param destPath
+	 *            浜岀淮鐮佽緭鍑鸿矾寰�
+	 * @throws Exception
+	 *             void TODO 鐢熸垚涓嶅甫Logo鐨勪簩缁寸爜
+	 */
+	public void encode(String content, String destPath) throws Exception {
+		encode(content, null, destPath, false);
+	}
+
+	public InputStream encode(String content) throws Exception {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		encode(content, null, out, false);
+		return new ByteArrayInputStream(out.toByteArray());
+	}
+
+	
+	public InputStream encodeDeleteWhite(String content) throws Exception {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		encodeDeleteWhite(content, null, out, false);
+		return new ByteArrayInputStream(out.toByteArray());
+	}
+	
+	
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:36:58
+	 * 
+	 * @param content
+	 *            浜岀淮鐮佸唴瀹�
+	 * @param logoImgPath
+	 *            Logo
+	 * @param output
+	 *            杈撳嚭娴�
+	 * @param needCompress
+	 *            鏄惁鍘嬬缉Logo
+	 * @throws Exception
+	 *             void TODO 鐢熸垚甯ogo鐨勪簩缁寸爜锛屽苟杈撳嚭鍒版寚瀹氱殑杈撳嚭娴�
+	 */
+	public void encode(String content, InputStream logoImg, OutputStream output, boolean needCompress)
+			throws Exception {
+		BufferedImage image = createImage(content, logoImg, needCompress);
+		ImageIO.write(image, FORMAT_NAME, output);
+	}
+
+	/**
+	 * 
+	 * @param content
+	 * @param logoImg
+	 * @param output
+	 *            浜岃繘鍒惰緭鍑烘祦
+	 * @param needCompress
+	 * @throws Exception
+	 */
+	public void encode(String content, InputStream logoImg, ByteArrayOutputStream output, boolean needCompress)
+			throws Exception {
+		BufferedImage image = createImage(content, logoImg, needCompress);
+		ImageIO.write(image, FORMAT_NAME, output);
+	}
+	
+	/**
+	 * 
+	 * @param content
+	 * @param logoImg
+	 * @param output
+	 *            浜岃繘鍒惰緭鍑烘祦
+	 * @param needCompress
+	 * @throws Exception
+	 */
+	public void encodeDeleteWhite(String content, InputStream logoImg, ByteArrayOutputStream output, boolean needCompress)
+			throws Exception {
+		BufferedImage image = createImageDeleteWhite(content, logoImg, needCompress);
+		ImageIO.write(image, FORMAT_NAME, output);
+	}
+
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:38:02
+	 * 
+	 * @param content
+	 *            浜岀淮鐮佸唴瀹�
+	 * @param output
+	 *            杈撳嚭娴�
+	 * @throws Exception
+	 *             void TODO 鐢熸垚涓嶅甫Logo鐨勪簩缁寸爜锛屽苟杈撳嚭鍒版寚瀹氱殑杈撳嚭娴�
+	 */
+	public void encode(String content, OutputStream output) throws Exception {
+		encode(content, null, output, false);
+	}
+
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:39:10
+	 * 
+	 * @param file
+	 *            浜岀淮鐮�
+	 * @return 杩斿洖瑙f瀽寰楀埌鐨勪簩缁寸爜鍐呭
+	 * @throws Exception
+	 *             String TODO 浜岀淮鐮佽В鏋�
+	 */
+	public String decode(File file) throws Exception {
+		BufferedImage image;
+		image = ImageIO.read(file);
+		if (image == null) {
+			return null;
+		}
+		BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
+		BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+		Result result;
+		Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
+		hints.put(DecodeHintType.CHARACTER_SET, CHARSET);
+		result = new MultiFormatReader().decode(bitmap, hints);
+		String resultStr = result.getText();
+		return resultStr;
+	}
+
+	/**
+	 * user: Rex date: 2016骞�12鏈�29鏃� 涓婂崍12:39:48
+	 * 
+	 * @param path
+	 *            浜岀淮鐮佸瓨鍌ㄤ綅缃�
+	 * @return 杩斿洖瑙f瀽寰楀埌鐨勪簩缁寸爜鍐呭
+	 * @throws Exception
+	 *             String TODO 浜岀淮鐮佽В鏋�
+	 */
+	public String decode(String path) throws Exception {
+		return decode(new File(path));
+	}
+
+	 private static BitMatrix deleteWhite(BitMatrix matrix) {
+        int[] rec = matrix.getEnclosingRectangle();
+        int resWidth = rec[2] + 1;
+        int resHeight = rec[3] + 1;
+ 
+        BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
+        resMatrix.clear();
+        for (int i = 0; i < resWidth; i++) {
+            for (int j = 0; j < resHeight; j++) {
+                if (matrix.get(i + rec[0], j + rec[1]))
+                    resMatrix.set(i, j);
+            }
+        }
+        return resMatrix;
+    }
+}

--
Gitblit v1.8.0