JAVA实现二维码生成加背景图

pom.xml依赖

  <!-- 二维码生成 -->
        <!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.0.1</version>
        </dependency> 
/**
 * 类名称:QRCodeMax
 * 类描述:生成二维码图片+背景+文字描述工具类
 * 创建人:一个除了帅气,一无是处的男人
 * 创建时间:2018年12月x日x点x分x秒
 * 修改时间:2019年2月x日x点x分x秒
 * 修改备注:更新有参数构造
 * @version: 2.0
 *
 */
public class QRCodeMax {

   //文字显示
   private static final int QRCOLOR = 0x201f1f; // 二维码颜色:黑色
   private static final int BGWHITE = 0xFFFFFF; //二维码背景颜色:白色

    // 设置QR二维码参数信息
    private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
        private static final long serialVersionUID = 1L;
        {
            put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);// 设置QR二维码的纠错级别(H为最高级别)
            put(EncodeHintType.CHARACTER_SET, "utf-8");// 设置编码方式
            put(EncodeHintType.MARGIN, 0);// 白边
        }
    };

       /**
        * 生成二维码图片+背景+文字描述
        * @param codeFile 生成图地址
        * @param bgImgFile 背景图地址
        * @param WIDTH 二维码宽度
        * @param HEIGHT 二维码高度
        * @param qrUrl 二维码识别地址
        * @param note  文字描述1
        * @param tui   文字描述2
        * @param size 文字大小
        * @param imagesX 二维码x轴方向
        * @param imagesY 二维码y轴方向
        * @param text1X 文字描述1x轴方向
        * @param text1Y 文字描述1y轴方向
        * @param text2X 文字描述2x轴方向
        * @param text2Y 文字描述2y轴方向
        */
        public static void CreatQRCode( File codeFile, File bgImgFile,Integer WIDTH,Integer HEIGHT,String qrUrl,
                String note,String tui,Integer size,Integer imagesX,Integer imagesY,Integer text1X,Integer text1Y
                ,Integer text2X,Integer text2Y) {
            try {
                MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
                // 参数顺序分别为: 编码内容,编码类型,生成图片宽度,生成图片高度,设置参数
                BitMatrix bm = multiFormatWriter.encode(qrUrl, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints);
                BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

                // 开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF) 白(0xFF000000)两色
                for (int x = 0; x < WIDTH; x++) {
                    for (int y = 0; y < HEIGHT; y++) {
                        image.setRGB(x, y, bm.get(x, y) ? QRCOLOR : BGWHITE);
                    }
                }

                /*
                 *     添加背景图片
                 */
                BufferedImage backgroundImage = ImageIO.read(bgImgFile);
                int bgWidth=backgroundImage.getWidth();
                int qrWidth=image.getWidth();
                //距离背景图片x边的距离,居中显示
                int disx=(bgWidth-qrWidth)-imagesX;
                //距离y边距离 * * * *
                int disy=imagesY;
                Graphics2D rng=backgroundImage.createGraphics();
                rng.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP));
                rng.drawImage(image,disx,disy,WIDTH,HEIGHT,null);

                /*
                 *     文字描述参数设置
                 */

                Color textColor=Color.white;
                rng.setColor(textColor);
                rng.drawImage(backgroundImage,0,0,null);
                //设置字体类型和大小(BOLD加粗/ PLAIN平常)
                rng.setFont(new Font("微软雅黑,Arial",Font.BOLD,size));
                //设置字体颜色
                rng.setColor(Color.black);
                int strWidth=rng.getFontMetrics().stringWidth(note);

                //文字1显示位置
                int disx1=(bgWidth-strWidth)-text1X;//左右
                rng.drawString(note,disx1,text1Y);//上下

                //文字2显示位置
                int disx2=(bgWidth-strWidth)-text2X;//左右
                rng.drawString(tui,disx2,text2Y);//上下

                rng.dispose();
                image=backgroundImage;
                image.flush();
                ImageIO.write(image, "png", codeFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * 测试
         * @param args
         */
        public static void main(String[] args)  {
            File bgImgFile=new File("D://tu/bg.png");//背景图片
            File QrCodeFile = new File("D://tu/myqrcode.png");//生成图片位置
            String url = "https://blog.csdn.net/weixin_38407595";//二维码链接
            String note = "" ;//文字描述
            String tui = "" ;//文字描述

            //宣传二维码生成
           //生成图地址,背景图地址,二维码宽度,二维码高度,二维码识别地址,文字描述1,文字描述2,文字大小,图片x轴方向,图片y轴方向,文字1||2xy轴方向
            CreatQRCode(QrCodeFile,bgImgFile, 148, 148, url, note,tui, 38, 408, 123, 0, 0, 410, 210);

        }
}

原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/12079394.html

时间: 2024-08-27 16:08:34

JAVA实现二维码生成加背景图的相关文章

java微信小程序参数二维码生成带背景图加字体(无限生成)

需求 :  1,因为项目需求 ,生成数以万计的二维码    2 ,每个二维码带不同的参数  3,二维码有固定背景图 4 , 往生成图片上写入 字体和编号(动态 ) 设计技术 :    1,微信接口token ,nginx 缓存  2,二维码 图片定义 写字 maven <dependency> <groupId>com.twelvemonkeys.imageio</groupId> <artifactId>imageio-jpeg</artifactI

java实现二维码生成的几个方法

1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourceforge.net/projects/barcode

java实现二维码生成及调用打印机打印

在开发二维码打印的过程中走过几次弯路,所以在这里特意将其记录下来留作备忘.一开始参考其他博主写的文章,有介绍通过编写JAVA后台代码来获取本地默认打印机的驱动实现打印.BUT!这样就导致在本地开发测试时看似一切正常,一旦项目部署到linux环境下,就会完全失效了(JAVA后台代码去获取linux本地的打印机驱动).还有介绍并提供编写的插件的(不甚了解这块),鉴于时间要求比较苛刻,那就简单的来吧. 需求:生成带水印效果的二维码图片,可以批量预览,并连接打印机批量打印. 开发思路:1.编写二维码生成

Java条形码/二维码生成和解析

注意-本类依赖jar包文件:core.jar和zxing-javase.jar 下载jar文件,到本博客文件栏目下载. import com.google.zxing.BarcodeFormat; import com.google.zxing.Binarizer; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeHintType

java web 二维码生成

pom支持: <!-- 二维码支持包 start--> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.google.zxing</

Android 生成带Logo的二维码或普通的二维码,后续将会推出一个java exe二维码生成插件

前几天在做微信绑定的时候,利用 Google Zxing 完成了一系列项目需求,可能后续还会更进,做得更人性化,比如自定义二维码,自定义LOGO,单个二维码绑定硬件设备,绕过 官方API限制,达到扫一次绑定公众号的需要 这次就不贴代码了,另外我把生成和保存的代码都注释了,包括二维码内容的填充,保存地址,都有详细的标识,有时间就写一个java swing exe 插件给大家用,跨平台的那种, 就是不管你电脑里有没有装 java 都可以用的插件 这里我就不上代码了,上几个效果图给大家看看生成效果,然

IOS原生方法实现二维码生成与扫描

转自:http://www.jianshu.com/p/d6663245d3fa 二维码的生成有好多第三方库,如Z-Xing.但是为了控制安装包的大小,或者并不需要其他的一些额外的功能,用系统的方法即可满足. 一.二维码的生成 + (UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)Imagesize logoImageSize:(CGFloat)waterImagesize{ CIFilter *filter =

JAVA商家二维码系统

每天记录学习,每天会有好心情.*^_^* 在学习基于JAVA商家二维码生成与解析系统项目的时候,方便日后能及时查阅,在本平台中记录一下基于JAVA商家二维码生成与解析系统的开发流程.在学习时候的选用了SSM(MYECLIPSE),这个框架不论是学习还是使用都非常方便,简单易上手.是我们学习编程可以重点学习的一个框架,我在开发基于JAVA商家二维码生成与解析系统项目的时候选用了MYECLIPSE来搭建SSM(MYECLIPSE)框架,最终将基于JAVA商家二维码生成与解析系统项目开发为了一个 后台

安卓实现二维码生成和扫描功能,扫描支持直接拍照扫码和相册图片扫码,还加了照明功能

最近在做二维码的生成和扫描,生成二维码相对而言较为简单,扫描相对复杂,遇到的问题较多,但是在实现二维码的生成和扫描之前最重要的一步 就是讲Zxing包导入,后面的内容大部分是使用包中的内容, 那我就从二维码的生成讲起吧! 二维码生成: 直接贴代码了 1 //要转换的地址或字符串,可以是中文,输入内容生成二维码 2 public Bitmap createQRImage(String string) { 3 try { 4 Hashtable<EncodeHintType, String> hi