欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现合成图片

程序员文章站 2024-03-24 22:53:16
...

前言:应公司需求,需要将二维码和公司的logo进行合成。

 

实现步骤:

1、生成二维码。

2、切好logo图。

3、图片进行合成。

 

直接贴代码:

/**
     * 生成二维码
     * @param backLink  扫码回调链接
     * @param savePath  二维码保存路径
     * @return 返回保存路径(用于保存数据库)
     * @throws IOException
     */
    public static String createQRCode(String backLink,String savePath) throws IOException {
        //计算二维码图片的高宽比
        int v =6;
        int width = 67 + 12 * (v - 1);
        int height = 67 + 12 * (v - 1);

        Qrcode x = new Qrcode();
        x.setQrcodeErrorCorrect('L');
        x.setQrcodeEncodeMode('B');//注意版本信息 N代表数字 、A代表 a-z,A-Z、B代表 其他)
        x.setQrcodeVersion(v);

        byte[] d = backLink.getBytes("utf-8");//汉字转格式需要抛出异常

        //缓冲区
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

        //绘图
        Graphics2D gs = bufferedImage.createGraphics();

        gs.setBackground(Color.WHITE);
        gs.setColor(Color.BLACK);
        gs.clearRect(0, 0, width, height);

        //偏移量
        int pixoff = 2;

        if (d.length > 0 && d.length < 120) {
            boolean[][] s = x.calQrcode(d);

            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < s.length; j++) {
                    if (s[j][i]) {
                        gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        }
        gs.dispose();
        bufferedImage.flush();
        //设置图片格式,与输出的路径
        String url = savePath;
        ImageIO.write(bufferedImage, "png", new File(url));
        System.out.println("二维码生成完毕");
        return url;
    }

1、生成二维码,需要注意地方:文件的后缀和版本号

 

Java实现合成图片

2、合成图片(格式为jpg,内容可随意更改)

 

/**
     * 图片合成
     * @param mainImgPath   主图片路径
     * @param qrcodePath    二维码路径
     * @param text          文字
     * @param compoundPath  图片合成保存路径
     * @param databasePath  数据库保存路径
     * @return  保存路径
     */
    public static String CompoundImage(String mainImgPath, String qrcodePath,String text,String compoundPath,String databasePath) {
        String ewmurl="";
        try {
            //1、获取主图片
            BufferedImage big = ImageIO.read(new File(mainImgPath));
            java.net.URL url = new URL("https://img-blog.csdn.net/20150906104118760");
            //2、拿到二维码
            BufferedImage erweima = ImageIO.read(new File(qrcodePath));
            int width = 709;
            int height = 472;
            Image image = big.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            BufferedImage bufferedImage2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
            //3、开始绘图
            Graphics2D g = bufferedImage2.createGraphics();
            g.drawImage(image, 0, 0, null);
            g.drawImage(erweima, 84, 44, 300, 300, null);
            Font font = new Font("微软雅黑", Font.BOLD, 38);
            g.setFont(font);
            g.setPaint(Color.BLACK);
            //4、设置位置
            int wordWidth = ImageUtils.getWordWidth(font, text);
            int i = width / 2;
            int i1 = (i - wordWidth) / 2;
            int numWidth=i+i1;
            g.drawString(text, numWidth-10, 310+28);
            g.dispose();

            ewmurl =compoundPath;
            ImageIO.write(bufferedImage2, "jpg", new File(ewmurl));
            System.out.println("图片生成完毕");
            ewmurl = databasePath;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ewmurl;
    }

3、合成图片(如果位置有规律,可以将位置算出来,分享一个读取px的方法)

public static int getWordWidth(Font font, String content) {
        FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
        int width = 0;
        for (int i = 0; i < content.length(); i++) {
            width += metrics.charWidth(content.charAt(i));
        }
        return width;
    }

 

 

效果:Java实现合成图片

 

如有不足,请多指教!

GitHub地址:https://github.com/chenmissyu/csdn-demo.git

相关标签: 合成图片