標籤:格式 mon too 二維 com return 實現 tty logs
直接上代碼:
二維碼產生核心類:
package com.bbkj.wechat.tool;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.util.EnumMap;import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import org.apache.log4j.Logger;import org.apache.log4j.spi.LoggerFactory;/** * 通過google的zxing實現二維碼(加入logo圖片) * Created by Administrator on 2017/2/22. */public final class EncodeImgZxing { public static Logger logger= Logger.getLogger(EncodeImgZxing.class); //二維碼顏色 private static final int BLACK = 0xFF000000;//0xFFFF0000,紅色 //二維碼背景色 private static final int WHITE = 0xFFFFFFFF;//0xFF0000FF,藍色 //註:二維碼顏色色差大,掃描快,但如果"BLACK‘設定為黑色外其他顏色,可能無法掃描 //二維碼圖片寬度 private static final int width = 300; //二維碼圖片高度 private static final int height = 300; //二維碼格式參數 private static final EnumMap<EncodeHintType, Object> hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class); static{ /*二維碼的錯誤修正層級(排錯率),4個層級: L (7%)、 M (15%)、 Q (25%)、 H (30%)(最高H) 錯誤修正資訊同樣儲存在二維碼中,錯誤修正層級越高,錯誤修正資訊佔用的空間越多,那麼能儲存的有用訊息就越少;共有四級; 選擇M,掃描速度快。 */ hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 二維碼邊界空白大小 1,2,3,4 (4為預設,最大) hints.put(EncodeHintType.MARGIN, 1); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); hints.put(EncodeHintType.MAX_SIZE, 350); hints.put(EncodeHintType.MIN_SIZE, 150); } /** * 繪製二維碼 * @param contents 二維碼內容 * @return image 二維碼圖片 * */ public static BufferedImage encodeImg(String contents){ BufferedImage image = null; try{ BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints); image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); int width = matrix.getWidth(); int height = matrix.getHeight(); for(int x = 0; x < width; x++){ for(int y =0;y < height; y++){ image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); } } }catch(Exception e){ logger.error(e.getMessage()); //System.out.println("產生二維碼失敗"+e.getMessage()); } return image; } /** * 二維碼輸出到檔案 * @param contents 二維碼內容 * @param format 圖片格式 * @param file 輸出檔案 * */ public static void writeToFile(String contents,String format,File file){ BufferedImage image = encodeImg(contents); try { ImageIO.write(image, format, file); } catch (IOException e) { logger.error(e.getMessage()); //System.out.println("二維碼寫入檔案失敗"+e.getMessage()); } } /** * 二維碼流式輸出 * @param contents 二維碼內容 * @param format 圖片格式 * @param stream 輸出資料流 * */ public static void writeToStream(String contents,String format,OutputStream stream){ BufferedImage image = encodeImg(contents); try { ImageIO.write(image, format, stream); } catch (IOException e) { logger.error(e.getMessage()); //System.out.println("二維碼寫入流失敗"+e.getMessage()); } }}
使用例子:
產生二維碼檔案:
@Test public void testWriteToFile() { String contents = "http://blog.csdn.net/typa01_kk"; String format = "jpeg"; //***此處如果格式為"gif",則logo圖片為黑色,其他格式ok String rootUrl = SystemUtil.getProjectClassesPath(); //產生二維碼 File logoImg = new File(rootUrl+File.separator+"logo.png"); File img = new File(rootUrl+File.separator+"csdn.jpg"); EncodeImgZxing.writeToFile(contents, format, img);}
java 二維碼產生