二维码下载

本贴最后更新于 2467 天前,其中的信息可能已经时移世易

生成 4 位随机数

  public static String generateRandom(){
        String fourRandom = "";
        //产生4位的随机数(不足4位前加零)
        int randomNum = (int)(Math.random()*10000);
        fourRandom = randomNum + "";
        int randLength = fourRandom.length();
        if(randLength<4){
            for(int i=1; i<=4-randLength; i++)
                fourRandom = fourRandom + "0";
        }
        return fourRandom;
   }

通过浏览器进行下载二维码

  public void downloadQr(RequestContext requestContext, HttpServletResponse response) throws IOException {
	Sign sign = signService.get(requestContext.get("id", String.class));
	String text = "http://www.baidu.com";
	int width = 300;
	int height = 300;
	//二维码的图片格式
	String format = "jpg";
	Hashtable hints = new Hashtable();
	//内容所使用编码
	hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
	BitMatrix bitMatrix = null;
	try {
		bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
		//生成二维码
		SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
		OutputStream out = response.getOutputStream();
		MatrixToImageWriter.writeToStream(bitMatrix, format, out);
		// 创建文件输出流
		response.setContentType("image/jpeg");
		byte buffer[] = new byte[1024];
		// 循环将输入流中的内容读取到缓冲区当中
		int len = 0;
			// 输出缓冲区的内容到浏览器,实现文件下载
		out.write(buffer, 0, len);
		out.close();
	} catch (WriterException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

直接在下载到本地磁盘

public void downloadQr(RequestContext requestContext, HttpServletResponse response) throws IOException {
	String classLoadPath = SignController.class.getClassLoader().getResource("").getPath();
	String imgPath = classLoadPath + ".jpg";
	// QrCodeWriter.write(sign.getId(), 300, 300, imgPath);
	String format = "jpg";// 二维码的图片格式
	Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
	hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 内容所使用字符集编码
	String text = "http://www.baidu.com";
	try {
		BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, 300, 300, hints);
		// 生成二维码
		SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
		String date = sf.format(new Date());
		String generateRandom = generateRandom();
		File outputFile = new File("C:\\Users\\chun\\Downloads" + File.separator + sign.getName() + generateRandom + ".jpg");
		MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
		OutputStream out = response.getOutputStream();
		response.reset();
		out.close();
	} catch (WriterException e) {
		// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

MatrixToImageWriter

package com.zxy.product.train.web.util;

import com.google.zxing.common.BitMatrix;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;


public final class MatrixToImageWriter {

    private static final int BLACK = 0xFF000000;
    private static final int WHITE = 0xFFFFFFFF;

    private MatrixToImageWriter() {}


    public static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.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, matrix.get(x, y) ? BLACK : WHITE);
            }
        }
        return image;
    }


    public static void writeToFile(BitMatrix matrix, String format, File file)
            throws IOException {
        BufferedImage image = toBufferedImage(matrix);
        if (!ImageIO.write(image, format, file)) {
            throw new IOException("Could not write an image of format " + format + " to " + file);
        }
    }


    public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
            throws IOException {
        BufferedImage image = toBufferedImage(matrix);
        if (!ImageIO.write(image, format, stream)) {
            throw new IOException("Could not write an image of format " + format);
        }
    }

}

MultiFormatWriter


package com.google.zxing;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.Writer;
import com.google.zxing.WriterException;
import com.google.zxing.aztec.AztecWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.datamatrix.DataMatrixWriter;
import com.google.zxing.oned.CodaBarWriter;
import com.google.zxing.oned.Code128Writer;
import com.google.zxing.oned.Code39Writer;
import com.google.zxing.oned.Code93Writer;
import com.google.zxing.oned.EAN13Writer;
import com.google.zxing.oned.EAN8Writer;
import com.google.zxing.oned.ITFWriter;
import com.google.zxing.oned.UPCAWriter;
import com.google.zxing.oned.UPCEWriter;
import com.google.zxing.pdf417.PDF417Writer;
import com.google.zxing.qrcode.QRCodeWriter;
import java.util.Map;

public final class MultiFormatWriter implements Writer {
    public MultiFormatWriter() {
    }

    public BitMatrix encode(String contents, BarcodeFormat format, int width, int height) throws WriterException {
        return this.encode(contents, format, width, height, (Map)null);
    }

    public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints) throws WriterException {
        Object writer;
        switch(null.$SwitchMap$com$google$zxing$BarcodeFormat[format.ordinal()]) {
        case 1:
            writer = new EAN8Writer();
            break;
        case 2:
            writer = new UPCEWriter();
            break;
        case 3:
            writer = new EAN13Writer();
            break;
        case 4:
            writer = new UPCAWriter();
            break;
        case 5:
            writer = new QRCodeWriter();
            break;
        case 6:
            writer = new Code39Writer();
            break;
        case 7:
            writer = new Code93Writer();
            break;
        case 8:
            writer = new Code128Writer();
            break;
        case 9:
            writer = new ITFWriter();
            break;
        case 10:
            writer = new PDF417Writer();
            break;
        case 11:
            writer = new CodaBarWriter();
            break;
        case 12:
            writer = new DataMatrixWriter();
            break;
        case 13:
            writer = new AztecWriter();
            break;
        default:
            throw new IllegalArgumentException("No encoder available for format " + format);
        }

        return ((Writer)writer).encode(contents, format, width, height, hints);
    }
}

  • 二维码
    9 引用 • 22 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...