Java如何生成彩色二维码(利用zxing包)

开发一个微信服务号的过程中,有这样一个需求,每一个产品,都要有对应的二维码,而且这个二维码的颜色可以自由控制,所以就想到了zxing包,下载链接:
https://download.csdn.net/download/qq_37928350/10864817

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.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

/**
 * 需求说明:一个推广二维码对应一类考试信息,微信扫码获取报考详情
 * 
 * 需要jar:zxing-code-2.3.jar 下载地址http://download.csdn.net/download/sanfye/8704583
 *
 */
public class ErWeiMa {
	// 需要注意 颜色码需是16进制字符串
	private static final int HUA_SE = 0xFFFF8C00; // 码颜色
	private static final int DI_SE = 0xFFEE82EE; // 底色

	public static void main(String[] args) {
		try {
			boolean flag = generateCode("https://www.baidu.com", "aa");
			if (flag) {
				System.out.println("成功生成二维码");
			}
		} catch (WriterException | IOException e) {
			System.err.println("生成二维码失败");
			e.printStackTrace();
		}
	}

	/**
	 * url对应所需产品url
	 * 
	 * @param url
	 * @param jpgName
	 *            生成二维码名
	 * @return
	 * @throws WriterException
	 * @throws IOException
	 */
	public static boolean generateCode(String url, String jpgName) throws WriterException, IOException {

		String path = "E:/"; // 图片生成的位置
		int width = 400;
		int height = 400;
		String tuJpg = "jpg";

		// 设置编码,防止中文乱码
		Hashtable ht = new Hashtable();
		ht.put(EncodeHintType.CHARACTER_SET, "UTF-8");

		// 设置二维码参数(编码内容,编码类型,图片宽度,图片高度,格式)
		BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width, height, ht);
		// 生成二维码(定义二维码输出服务器路径)
		File outputFile = new File(path);
		if (!outputFile.exists()) {
			// 创建文件夹
			outputFile.mkdir();
		}

		int b_width = bitMatrix.getWidth();
		int b_height = bitMatrix.getHeight();
		// 建立图像缓冲器
		BufferedImage image = new BufferedImage(b_width, b_height, BufferedImage.TYPE_3BYTE_BGR);
		for (int x = 0; x < b_width; x++) {
			for (int y = 0; y < b_height; y++) {
				image.setRGB(x, y, bitMatrix.get(x, y) ? HUA_SE : DI_SE);
			}
		}
		// 生成二维码
		ImageIO.write(image, tuJpg, new File(path + "/" + jpgName + "." + tuJpg));
		// 二维码的名称
		// ha.jpg

		return true;
	}
}

这个就是二维码生成代码啦,但是16进制的颜色字符串怎么来,这还需要一个颜色码与Color对象互转的工具:

import java.awt.Color;

public class YanSeFormat {
	// 颜色码转为color对象
	public static Color StringToColor(String str) {
		int i = Integer.parseInt(str.substring(1), 16);
		return new Color(i);
	}

	/**
	 * Color对象转换成字符串
	 * 
	 * @param color
	 *            Color对象
	 * @return 16进制颜色字符串
	 */
	private static String toHexFromColor(Color color) {
		String r, g, b;
		StringBuilder su = new StringBuilder();
		r = Integer.toHexString(color.getRed());
		g = Integer.toHexString(color.getGreen());
		b = Integer.toHexString(color.getBlue());
		r = r.length() == 1 ? "0" + r : r;
		g = g.length() == 1 ? "0" + g : g;
		b = b.length() == 1 ? "0" + b : b;
		r = r.toUpperCase();
		g = g.toUpperCase();
		b = b.toUpperCase();
		su.append("0xFF");
		su.append(r);
		su.append(g);
		su.append(b);
		return su.toString();
	}

	/**
	 * 字符串转换成Color对象
	 * 
	 * @param colorStr
	 *            16进制颜色字符串
	 * @return Color对象
	 */
	public static Color toColorFromString(String colorStr) {
		colorStr = colorStr.substring(4);
		Color color = new Color(Integer.parseInt(colorStr, 16));
		return color;
	}

	public static void main(String[] args) {
		Color color = StringToColor("#FF8C00"); // 填颜色码
		String aa = toHexFromColor(color);
		System.err.println(aa);

	}

}

需要注意的是,实际环境中,需要保证二维码绑定的url,此处我们url指定的是度娘,用微信扫一扫下面的二维码,就自动去找度娘去啦。

Java如何生成彩色二维码(利用zxing包)_第1张图片

 

你可能感兴趣的:(基础)