Java 生成海报,嵌入二维码及文字

Java 生成海报,嵌入二维码及文字

绿林寻猫
2021-12-08 / 0 评论 / 166 阅读 / 正在检测是否收录...

1.导入依赖

        <!--生成二维码-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-extra</artifactId>
            <version>5.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.3</version>
        </dependency>

2.工具

/**
 * @ClassName ImageUtil
 * @Description TODO
 * @Author Uncle
 * @Date 2020/09/28 23:31
 * @Version 1.0
 */import cn.hutool.extra.qrcode.QrCodeUtil;import cn.hutool.extra.qrcode.QrConfig;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import org.apache.commons.io.IOUtils;import org.springframework.core.io.DefaultResourceLoader;import org.springframework.core.io.ResourceLoader;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;/**
 * @author Uncle
 * @Description TODO 在图片上生成二维码并且在图片上添加文字 保存指定地址文件名
 * @Date  2020-09-30 10:42
 */public class ImageUtil {    /**
     * @author Uncle
     * @Description TODO 在一张背景图上添加二维码
     * @Date 2020-09-28 23:59
     * @param   content 二维码内容
     * @param   written 文字内容
     * @param   fielPath 保存文件 例: d:/1.png
     * @param   hbPath 海报图片地址 例: d:/1.png
     * @param   logoPath 二维码logo
     * @return
     */
    public static void drawString(String content, String written, String fielPath, String hbPath, String logoPath) throws Exception {
        BufferedImage image = addWater(content, hbPath, logoPath);
        Graphics2D gd = image.createGraphics();        // 3、设置对线段的锯齿状边缘处理
        gd.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);        // 5、设置水印文字颜色
        gd.setColor(Color.black);        // 6、设置水印文字Font
        gd.setFont(new Font("黑体", Font.BOLD, 40));        // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
        gd.drawString(written, 295, 988);
        gd.dispose();

        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);
        ImageIO.write(image, "png", imOut);
        InputStream inputStream = new ByteArrayInputStream(bs.toByteArray());

        OutputStream outStream = new FileOutputStream(fielPath);
        IOUtils.copy(inputStream, outStream);
        inputStream.close();
        outStream.close();

    }    /***
     * 在一张背景图上添加二维码
     */
    public static BufferedImage addWater(String content, String hbPath, String logoPath) throws Exception {        // 读取原图片信息
        //得到文件
        File file = new File(hbPath);        //文件转化为图片
        Image srcImg = ImageIO.read(file);        //获取图片的宽
        int srcImgWidth = srcImg.getWidth(null);        //获取图片的高
        int srcImgHeight = srcImg.getHeight(null);        // 加水印
        BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bufImg.createGraphics();
        g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);        //使用工具类生成二维码
        Image image = createQrCode(content, 226, 226, logoPath);        //将小图片绘到大图片上,500,300 .表示你的小图片在大图片上的位置。
        g.drawImage(image, 263, 700, null);        //设置颜色。
        g.setColor(Color.WHITE);
        g.dispose();        return bufImg;
    }    private static BufferedImage createQrCode(String content, int width, int height, String logoPath) throws IOException {
        QrConfig config = new QrConfig(width, height);        if(logoPath!=null){
            Image image = ImageIO.read(new FileInputStream(new File(logoPath)));
            config.setImg(image);
        }
        config.setErrorCorrection(ErrorCorrectionLevel.H);        return QrCodeUtil.generate(
                content,
                config);
    }    public static InputStream resourceLoader(String fileFullPath) throws IOException {
        ResourceLoader resourceLoader = new DefaultResourceLoader();        return resourceLoader.getResource(fileFullPath).getInputStream();
    }


}


3.测试

ImageUtil.drawString("哈哈哈哈","123123","d:\\1.png","D:\\t\\1.png","D:\\logo.png");


0

评论 (0)

取消