/* package com.bashi.dk.util; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; import lombok.extern.slf4j.Slf4j; import sun.font.FontDesignMetrics; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; @Slf4j public class ImageUtil { public static void main(String[] args) { String filePath = "d:\\Users\\004796\\桌面\\123\\hd_bg.png"; Map content = new LinkedHashMap<>(); content.put(" 转账批次号","542838541"); content.put("  转出单位","招商银行股份有限公司"); content.put("  转出账户","2361293892173872198"); content.put("转出账号地区","深圳市福田区深南大道708"); content.put(" 收款人姓名","马中华"); content.put("  收款账户","1273891273897123718"); content.put("    币种","人民币元"); content.put("  转出金额","100000.00"); content.put("  转出时间","2023-11-27 09:30:12"); content.put("  转账类型","签约金融企业--网贷放款预约到账"); content.put("  执行方式","点击选择执行方式"); content.put("    状态","点击选择状态"); content.put("  银行备注","点击选择银行备注"); content.put("  处理结果","点击选择处理结果"); content.put("  用户备注","点击选择用户备注"); String putPath = "d:\\Users\\004796\\桌面\\123\\1233.jpg"; createStringMark(filePath,content,putPath); } //给jpg添加文字 public static boolean createStringMark(String filePath, Map content, String outPath) { ImageIcon imgIcon = new ImageIcon(filePath); Image theImg = imgIcon.getImage(); int width = theImg.getWidth(null) == -1 ? 200 : theImg.getWidth(null); int height = theImg.getHeight(null) == -1 ? 200 : theImg.getHeight(null); int fontSize = 16; BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = bimage.createGraphics(); Color mycolor = Color.black; g.setColor(mycolor); g.setBackground(Color.black); g.drawImage(theImg, 0, 0, null); g.setFont(new Font("宋体", Font.PLAIN, fontSize)); //字体、字型、字号 RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setRenderingHints(hints); Graphics2D g1 = bimage.createGraphics(); g1.setColor(mycolor); g1.setBackground(Color.black); g1.drawImage(theImg, 0, 0, null); g1.setFont(new Font("黑体", Font.PLAIN, fontSize)); //字体、字型、字号 g1.setRenderingHints(hints); int widthFlag = 500; int heightFlag = 335; for (Map.Entry entry : content.entrySet()) { g1.drawString(entry.getKey()+": "+entry.getValue(), widthFlag, heightFlag); //画文字 heightFlag += 29; } g1.dispose(); g.dispose(); FileOutputStream out = null; try { out = new FileOutputStream(outPath); //先用一个特定的输出文件名 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage); param.setQuality(100, true); // encoder.encode(bimage, param); } catch (Exception e) { log.error("图片生成失败", e); return false; } finally { try { if(out != null) out.close(); } catch (IOException e) { log.error(e.getMessage(), e); return false; } } return true; } public static void gogo(){ int fontSize = 14; // 获取当前系统所有字体 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontNames = ge.getAvailableFontFamilyNames(); String str = "转账批次号: 1231231"; int height = 0; int width = 0; // 根据字体获取需要生成的图片的宽和高 for (String fontName : fontNames) { Font font = new Font(fontName, Font.PLAIN, fontSize); FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font); height += metrics.getHeight(); int tmpWidth = metrics.stringWidth(fontName + " : " + str); if (tmpWidth > width) { width = tmpWidth; } } BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); Graphics2D g2d = null; try { //创建画笔 g2d = image.createGraphics(); //设置背景颜色为白色 g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, image.getWidth(), image.getHeight()); //设置画笔颜色为黑色 g2d.setColor(Color.BLACK); RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); // 开启文字抗锯齿 hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHints(hints); int startY = 0; for (String fontName : fontNames) { Font font = new Font(fontName, Font.PLAIN, fontSize); System.out.println(fontName); g2d.setFont(font); g2d.drawString(fontName + " : " + str, 0, startY); // 下一行文字的左上角纵坐标 FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font); startY += metrics.getHeight(); } String savePath = "d:\\Users\\004796\\桌面\\123\\1111.jpg"; ImageIO.write(image, "PNG", new File(savePath)); } catch (IOException e) { e.printStackTrace(); } finally { if (g2d != null) { g2d.dispose(); } } } } */