记录一下 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
本站部分图文来源于网络,如有侵权请联系删除。