OpenJWeb鏂板浜岀淮鐮佸浘鐗囩敓鎴愬姛鑳

OpenJWeb鏂板浜岀淮鐮佸浘鐗囩敓鎴愬姛鑳?

鍦ㄥ紑鍙戣繘閿€瀛樿蒋浠剁殑鏃跺€欓渶瑕佽€冭檻浼佷笟鍒朵綔浜岀淮鐮佺殑鍔熻兘銆備笓涓氱殑浜岀淮鐮佹墦鍗拌蒋浠跺彲浠ヨ鍏ユ枃鏈枃浠?鎴栬€呮暟鎹簱瀛楁锛屾妸瀛楃涓茶浆鎹㈡垚浜岀淮鐮佸浘鐗囥€傚綋鐒朵娇鐢╦ava绋嬪簭涔熷彲浠ョ敓鎴愪簩缁寸爜鍥剧墖锛屽苟涓斿彲浠ユ妸浜岀淮鐮佸浘鐗囧弽鍚戣В鏋愬嚭瀵瑰簲鐨勫瓧绗︿覆缂栫爜銆備笅闈粙缁嶄簩缁?鐮佸浘鐗囩敓鎴愬強鍙嶅悜瑙f瀽鐨勮繃绋嬶細

package com.openjweb.erp.barcode;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
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.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.encoder.ByteMatrix;


//http://hi.baidu.com/baid/blog/item/fd446e06d199a77702088102.html
//http://www.4ucode.com/Study/Topic/1162485
//http://www.baishaode.com/blog/?p=436
public class QRCodeGen
{
聽/**
聽 * 鐢熸垚浜岀淮鐮佸浘鐗?br>聽 * @param code 寰呯敓鎴愬浘鐗囩殑浜岀淮鐮?br>聽 * @param destFile 鐢熸垚浜岀淮鐮佸浘鐗囧瓨鍌ㄧ殑鏂囦欢
聽 */
聽public static void createQRCodePic(String code,String destFile)
聽{
聽聽BitMatrix byteMatrix;
聽聽try
聽聽{
聽聽聽byteMatrix = new MultiFormatWriter()
聽聽聽.encode(code,BarcodeFormat.QR_CODE, 200, 200);
聽聽聽 聽聽File file = new File(destFile);
聽聽聽聽 聽MatrixToImageWriter.writeToFile(byteMatrix, destFile.substring(destFile.lastIndexOf(".")+1), file);
聽聽}
聽聽catch (IOException e)
聽聽{
聽聽聽e.printStackTrace();
聽聽}
聽聽catch (WriterException e1)
聽聽{
聽聽聽e1.printStackTrace();
聽聽}
聽}

聽/**
聽 * 鍙嶅悜瑙f瀽浜岀淮鐮?br>聽 * @param picFile
聽 * @return
聽 */
聽public static String decodeQRCode(String imgPath,String charset)
聽{
聽聽String code = "";
聽聽try
聽聽{
聽聽聽Reader reader = new MultiFormatReader();
聽聽聽File file = new File(imgPath);
聽聽聽BufferedImage image;
聽聽聽try
聽聽聽{
聽聽聽聽image = ImageIO.read(file);
聽聽聽聽聽聽 if (image == null)
聽聽聽聽聽聽 {
聽聽聽聽聽聽 聽System.out.println("Could not decode image");
聽聽聽聽聽聽 }
聽聽聽聽聽聽 LuminanceSource source = new BufferedImageLuminanceSource(image);
聽聽聽聽聽聽 BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
聽聽聽聽聽聽 Result result;
聽聽聽聽聽聽 Hashtable hints= new Hashtable();
聽聽聽聽聽聽 hints.put(DecodeHintType.CHARACTER_SET, charset); //utf-8
聽聽聽聽聽聽 //瑙g爜璁剧疆缂栫爜鏂瑰紡涓猴細utf-8锛?br>聽聽聽聽聽聽 result = new MultiFormatReader().decode(bitmap,hints);
聽聽聽聽聽聽 String resultStr = result.getText();
聽聽聽聽聽聽 code = resultStr;
聽聽聽聽聽聽 System.out.println("瑙f瀽鍚庡唴瀹癸細"+resultStr);
聽聽聽}
聽聽聽catch (IOException ioe)
聽聽聽{
聽聽聽聽System.out.println(ioe.toString());
聽聽聽}
聽聽聽catch (ReaderException re)
聽聽聽{
聽聽聽聽System.out.println(re.toString());
聽聽聽}
聽聽聽}
聽聽catch(Exception ex)
聽聽{
聽聽聽System.out.println(ex.toString());
聽聽}
聽聽return code;
聽}

聽public static void main(String[] args) {

聽聽String str = "test";//浜岀淮鐮佸唴瀹?br>聽聽String path = "d:/test";

聽聽BitMatrix byteMatrix;
聽聽try
聽聽{
聽聽聽byteMatrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, 200, 200);

聽聽File file = new File(path + ".png");
聽聽MatrixToImageWriter.writeToFile(byteMatrix, "png", file);
聽聽} catch (IOException e) {
聽聽e.printStackTrace();
聽聽} catch (WriterException e1) {
聽聽e1.printStackTrace();
聽聽}
聽聽}
}

jsp璋冪敤绀轰緥锛?/p>

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="com.openjweb.erp.barcode.*"%>

<%
try
{
聽//娴嬭瘯閫氳繃绋嬪簭鐢熸垚浜岀淮鐮佸浘褰?br>聽//String encodeStr = "涓崕浜烘皯鍏卞拰鍥?;

聽//String encodeStr = "http://www.openjweb.com";

聽String encodeStr = "鑰佸﹩鎴戠埍浣?";

聽out.println("QRCode浜岀淮鐮佹祴璇?"+encodeStr+"<br>");
聽encodeStr = new String(encodeStr.getBytes("utf-8"), "ISO-8859-1");//杞崲鎴怚SO-8859-1

聽String imgPath = "d:/barcode.png";
聽聽聽 QRCodeGen.createQRCodePic(encodeStr,imgPath);

聽out.println("瀵圭敓鎴愮殑鏂囦欢杩涜瑙g爜,璇诲彇鐢熸垚鐨勫浘鐗?");
聽聽聽 String decode = QRCodeGen.decodeQRCode(imgPath,"utf-8");聽 //杩樺師鎴恥tf-8缂栫爜
聽out.println(decode);

}
catch(Exception ex)
{

ex.printStackTrace();

}
%>