java 二維碼產生

來源:互聯網
上載者:User

標籤:格式   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 二維碼產生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.