記錄一下 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.uj5u.com/houduan/482115.html
標籤:Java
上一篇:C++ string 字串類詳解
下一篇:你從來沒有見過的除以2的寫法
