• java~生成二维码源代码


    java源代码:

    //二维码uat访问地址
    String text = "http://域名/项目名/页面.html?参数=";
    int width = num; // 二维码图片的宽
    int height = num1; // 二维码图片的高
    String outPutath = path + 二维码名字 + ".png"; //上传成功
    outPutPath = outPutPath.replaceAll("\\", "/");
    String imageType = "png"; // 二维码生成类型
    QRCodeTool.zxingCodeCreate(text, width, height, outPutPath,imageType);

    二维码工具包~源代码

    package com.yd.meeting.register.util;

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.geom.AffineTransform;
    import java.awt.image.AffineTransformOp;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.HashMap;
    import java.util.Map;

    import javax.imageio.ImageIO;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.log4j.Logger;

    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

    public class QRCodeTool {
    private static final Log log = LogFactory.getLog(QRCodeTool.class);
    private static final int IMAGE_WIDTH = 100;
    private static final int IMAGE_HEIGHT = 100;
    private static final int IMAGE_HALF_WIDTH = IMAGE_WIDTH / 2;
    private static final int FRAME_WIDTH = 2;
    private static MultiFormatWriter mutiWriter = new MultiFormatWriter();


    public static void encode(String content, int width, int height,
    String srcImagePath, String destImagePath) {
    try {
    ImageIO.write(genBarcode(content, width, height, srcImagePath),
    "jpg", new File(destImagePath));
    } catch (IOException e) {
    log.debug(e);
    } catch (WriterException e) {
    log.debug(e);
    }
    }

    private static BufferedImage genBarcode(String content, int width,
    int height, String srcImagePath) throws WriterException,
    IOException {
    BufferedImage scaleImage = scale(srcImagePath, IMAGE_WIDTH,
    IMAGE_HEIGHT, true);
    int[][] srcPixels = new int[IMAGE_WIDTH][IMAGE_HEIGHT];
    for (int i = 0; i < scaleImage.getWidth(); i++) {
    for (int j = 0; j < scaleImage.getHeight(); j++) {
    srcPixels[i][j] = scaleImage.getRGB(i, j);
    }
    }
    Map<EncodeHintType, Object> hint = new HashMap<EncodeHintType, Object>();
    hint.put(EncodeHintType.CHARACTER_SET, "utf-8");
    hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
    // 生成二维码
    BitMatrix matrix = mutiWriter.encode(content, BarcodeFormat.QR_CODE,
    width, height, hint);
    // 二维矩阵转为一维像素数组
    int halfW = matrix.getWidth() / 2;
    int halfH = matrix.getHeight() / 2;
    int[] pixels = new int[width * height];
    for (int y = 0; y < matrix.getHeight(); y++) {
    for (int x = 0; x < matrix.getWidth(); x++) {
    // 左上角颜色,根据自己需要调整颜色范围和颜色
    if (x > 0 && x < 170 && y > 0 && y < 170) {
    Color color = new Color(231, 144, 56);
    int colorInt = color.getRGB();
    pixels[y * width + x] = matrix.get(x, y) ? colorInt
    : 16777215;
    }
    // 读取图片
    else if (x > halfW - IMAGE_HALF_WIDTH
    && x < halfW + IMAGE_HALF_WIDTH
    && y > halfH - IMAGE_HALF_WIDTH
    && y < halfH + IMAGE_HALF_WIDTH) {
    pixels[y * width + x] = srcPixels[x - halfW
    + IMAGE_HALF_WIDTH][y - halfH + IMAGE_HALF_WIDTH];
    } else if ((x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH
    && x < halfW - IMAGE_HALF_WIDTH + FRAME_WIDTH
    && y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
    + IMAGE_HALF_WIDTH + FRAME_WIDTH)
    || (x > halfW + IMAGE_HALF_WIDTH - FRAME_WIDTH
    && x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH
    && y > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
    + IMAGE_HALF_WIDTH + FRAME_WIDTH)
    || (x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH
    && x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH
    && y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
    - IMAGE_HALF_WIDTH + FRAME_WIDTH)
    || (x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH
    && x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH
    && y > halfH + IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
    + IMAGE_HALF_WIDTH + FRAME_WIDTH)) {
    pixels[y * width + x] = 0xfffffff;
    // 在图片四周形成边框
    } else {
    // 二维码颜色
    int num1 = (int) (50 - (50.0 - 13.0) / matrix.getHeight()
    * (y + 1));
    int num2 = (int) (165 - (165.0 - 72.0) / matrix.getHeight()
    * (y + 1));
    int num3 = (int) (162 - (162.0 - 107.0)
    / matrix.getHeight() * (y + 1));
    Color color = new Color(num1, num2, num3);
    int colorInt = color.getRGB();
    // 此处可以修改二维码的颜色,可以分别制定二维码和背景的颜色;
    pixels[y * width + x] = matrix.get(x, y) ? colorInt
    : 16777215;
    // 0x000000:0xffffff
    }
    }
    }
    BufferedImage image = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);
    image.getRaster().setDataElements(0, 0, width, height, pixels);
    return image;
    }

    private static BufferedImage scale(String srcImageFile, int height,
    int width, boolean hasFiller) throws IOException {
    double ratio = 0.0; // 缩放比例
    File file = new File(srcImageFile);
    BufferedImage srcImage = ImageIO.read(file);
    Image destImage = srcImage.getScaledInstance(width, height,
    BufferedImage.SCALE_SMOOTH);
    // 计算比例
    if ((srcImage.getHeight() > height) || (srcImage.getWidth() > width)) {
    if (srcImage.getHeight() > srcImage.getWidth()) {
    ratio = (new Integer(height)).doubleValue()
    / srcImage.getHeight();
    } else {
    ratio = (new Integer(width)).doubleValue()
    / srcImage.getWidth();
    }
    AffineTransformOp op = new AffineTransformOp(
    AffineTransform.getScaleInstance(ratio, ratio), null);
    destImage = op.filter(srcImage, null);
    }
    if (hasFiller) {
    // 补白
    BufferedImage image = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);
    Graphics2D graphic = image.createGraphics();
    graphic.setColor(Color.white);
    graphic.fillRect(0, 0, width, height);
    if (width == destImage.getWidth(null))
    graphic.drawImage(destImage, 0,
    (height - destImage.getHeight(null)) / 2,
    destImage.getWidth(null), destImage.getHeight(null),
    Color.white, null);
    else
    graphic.drawImage(destImage,
    (width - destImage.getWidth(null)) / 2, 0,
    destImage.getWidth(null), destImage.getHeight(null),
    Color.white, null);
    graphic.dispose();
    destImage = image;
    }
    return (BufferedImage) destImage;
    }
    //////////////////////////
    //二维码颜色
    private static final int BLACK = 0xFF000000;
    //二维码颜色
    private static final int WHITE = 0xFFFFFFFF;

    /**
    * <span style="font-size:18px;font-weight:blod;">ZXing 方式生成二维码</span>
    * @param text <a href="javascript:void();">二维码内容</a>
    * @param width 二维码宽
    * @param height 二维码高
    * @param outPutPath 二维码生成保存路径
    * @param imageType 二维码生成格式
    */
    public static void zxingCodeCreate(String text, int width, int height, String outPutPath, String imageType){
    Map<EncodeHintType, String> his = new HashMap<EncodeHintType, String>();
    //设置编码字符集
    his.put(EncodeHintType.CHARACTER_SET, "utf-8");
    try {
    //1、生成二维码
    BitMatrix encode = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, his);

    //2、获取二维码宽高
    BitMatrix deleteWhite = deleteWhite(encode);
    int codeWidth = deleteWhite.getWidth();
    int codeHeight = deleteWhite.getHeight();
    //3、将二维码放入缓冲流
    BufferedImage image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);
    for (int i = 0; i < codeWidth; i++) {
    for (int j = 0; j < codeHeight; j++) {
    //4、循环将二维码内容定入图片
    image.setRGB(i, j, deleteWhite.get(i, j) ? BLACK : WHITE);
    }
    }
    File outPutImage = new File(outPutPath);
    //如果图片不存在创建图片
    if(!outPutImage.exists())
    outPutImage.createNewFile();
    //5、将二维码写入图片
    ImageIO.write(image, imageType, outPutImage);
    } catch (WriterException e) {
    //e.printStackTrace();
    log.info(e);
    System.out.println("二维码生成失败");
    } catch (IOException e) {
    //e.printStackTrace();
    log.info(e);
    System.out.println("生成二维码图片失败");
    }
    }

    public 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;
    }
    public static void main(String[] args) throws UnsupportedEncodingException {
    // 依次为内容(不支持中文),宽,长,中间图标路径,储存路径
    //C:UsersAdministratorDesktop网点ERP
    /*DEMO2.encode("http://www.baidu.com/", 512, 512,
    "D:\logo.png", "D:\2013-01.jpg");*/
    /* QRCodeTool.encode("http://www.baidu.com/", 512, 512,
    "C:\Users\Administrator\Desktop\0.png", "D:\2013-02.jpg");*/
    /* QRCodeTool.encode("http://210.45.175.11/", 512, 512,
    "F:\杂图\593219843225a0c8a1e93c25b.jpg", "D:\2013-01.jpg");*/
    QRCodeTool.zxingCodeCreate("http://weixin.yundasys.com/opserver/interface/ydwechat/sharePage.do?viewKey=V007_1&data=1013201700", 350, 350, "d://zxingcode.jpg", "jpg");

    }
    }

  • 相关阅读:
    Hard Rock
    Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
    codeforces 793B. Igor and his way to work
    codeforces 1B Spreadsheets
    HDU 1069 Monkey and Banana
    codeforces 2B The least round way
    【机器学习】 通俗说拟合
    python-八皇后问题
    python-核心知识思维导图
    python-@property 属性
  • 原文地址:https://www.cnblogs.com/Darkqueen/p/10449713.html
Copyright © 2020-2023  润新知