有色二维码

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);
 
    }
 
}

以上为生成16进制的颜色码,用于生成有色二维码(使用到一个zxing的包)

 

 

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<EncodeHintType, Object> ht = new Hashtable<EncodeHintType, Object>();
        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进制的颜色字符串)

posted @ 2020-03-31 15:42  西府海棠de  阅读(750)  评论(0编辑  收藏  举报