百木园-与人分享,
就是让自己快乐。

记录一下 Java 合成图片 类似与小程序海报二维码,合成过程很慢

记录一下 Java 合成图片 类似与小程序海报二维码,合成过程很慢

import cn.hutool.core.img.ImgUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import me.zhengjie.utils.FileUtil;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

/**
 * 合成图片
 * 记录一下合成图片
 */
public class ImgUtils {
    String templatePath = \"D:\\\\download\\\\bgcq.png\"; // 背景图
    String seedPath = \"D:\\\\download\\\\16534475114971.jpg\"; // 二维码图

    public static void main(String[] args) {
        ImgUtils imgUtil = new ImgUtils();
        imgUtil.SyntheticImages();
    }


    public void SyntheticImages() {

        //背景
        File templateFlie = new File(templatePath);
        BufferedImage bg = null;//读取背景图片
        // 透明颜色
        Color c = new Color(0f, 0f, 0f, .0f);
        try {
            bg = ImageIO.read(templateFlie);
        } catch (IOException e) {
            e.printStackTrace();
        }
        int height = bg.getHeight();//背景图片的高
        int width = bg.getWidth();  //背景图片的宽

        BufferedImage qcCode = null;  // 读取二维码图片
        try {
            qcCode = ImageIO.read(new File(seedPath));
        } catch (IOException e) {
            e.printStackTrace();
        }

        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);//创建画布 TYPE_INT_ARGB 可以设置颜色透明度
        Graphics2D g = img.createGraphics();//生成画笔 开启画图
        // 设置背景色
        g.setBackground(c);
        // 绘制背景图片
        g.drawImage(bg.getScaledInstance(width, height, Image.SCALE_DEFAULT), 0, 0, null); // 绘制缩小后的图

        //绘制二维码图片  定位到背景图的右下角
        g.drawImage(qcCode.getScaledInstance(516, 516, Image.SCALE_DEFAULT), 45, 138, null); // 绘制缩小后的图

        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 抗锯齿
        Font font = new Font(\"苹方-简\", Font.BOLD, 24);// 添加字体的属性设置 字体要注意如果系统没有该字体,执行完可能不是预期
        g.setFont(font);
        g.setColor(Color.white);
        g.drawString(\"加入团队\", 60, 55);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        Font font2 = new Font(\"苹方-简\", Font.PLAIN, 18);// 添加字体的属性设置
        g.setFont(font2);
        g.setColor(Color.white);
        g.drawString(\"微信扫码加入xx团队,无需审核直接加入\", 60, 95);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        Font font3 = new Font(\"苹方-简\", Font.BOLD, 32);// 添加字体的属性设置
        g.setFont(font3);
        g.setColor(Color.black);
        g.drawString(\"xxx经济技术开发区安全生产监督管\", 35, 743);
        g.drawString(\"理局志愿服务队\", 35, 778);

        //关掉画笔
        g.dispose();

        try {
            ImageIO.write(img, \"png\", new File(\"D:\\\\download\\\\x13.png\"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(\"合成图片成功,路径:\" + \"D:\\\\download\");
    }

    /**
     * 使用hutool 工具类
     */
    public void SyntheticImages2() {
        // 生成的二维码
//        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//        QrCodeUtil.generate(\"https://hutool.cn/\", 516, 516, ImgUtil.IMAGE_TYPE_JPG, outputStream);

        // 要输出的图片
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        // 将图片合成在一起
        ImgUtil.pressImage(
                FileUtil.getInputStream(templatePath), // 主图片
                out, // 输出图片
                ImgUtil.read(new File(seedPath)).getScaledInstance(516, 516, Image.SCALE_DEFAULT), //水印图片
                0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                0, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                1.0f
        );

        ByteArrayOutputStream out2 = new ByteArrayOutputStream();
        ImgUtil.pressText(//
                new ByteArrayInputStream(out.toByteArray()), //
                out2, //
                \"加入团队\", Color.WHITE, //文字
                new Font(\"苹方-简\", Font.BOLD, 24), //字体
                -190, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                -361, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                1.0f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
        );

        ByteArrayOutputStream out3 = new ByteArrayOutputStream();
        ImgUtil.pressText(//
                new ByteArrayInputStream(out2.toByteArray()), //
                out3, //
                \"微信扫码加入xxx团队,无需审核直接加入\", Color.WHITE, //文字
                new Font(\"苹方-简\", Font.PLAIN, 18), //字体
                -68, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                -321, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                1.0f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
        );


        ByteArrayOutputStream out4 = new ByteArrayOutputStream();
        ImgUtil.pressText(//
                new ByteArrayInputStream(out3.toByteArray()), //
                out4, //
                \"xxx经济技术开发区安全生产监督管\", Color.black, //文字
                new Font(\"苹方-简\", Font.BOLD, 32), //字体
                -5, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                323, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                1.0f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
        );

        ByteArrayOutputStream out5 = new ByteArrayOutputStream();
        ImgUtil.pressText(//
                new ByteArrayInputStream(out4.toByteArray()), //
                out5, //
                \"理局志愿服务队\", Color.black, //文字
                new Font(\"苹方-简\", Font.BOLD, 32), //字体
                -165, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                363, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                1.0f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
        );

        FileUtil.writeBytes(out5.toByteArray(), FileUtil.file(\"D:\\\\download\\\\x10.jpg\"));

    }
}

 

 


来源:https://www.cnblogs.com/KingPingyue/p/16317262.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 记录一下 Java 合成图片 类似与小程序海报二维码,合成过程很慢

相关推荐

  • 暂无文章