springboot生成图片并在图片上添加字体进行换行
生活随笔
收集整理的這篇文章主要介紹了
springboot生成图片并在图片上添加字体进行换行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
話不多說直接上代碼,本次返回的生成圖片的base64字符
/*** @param message 圖片上要添加的文字* @param width 畫布的寬度* @param height 畫布的高度* @return*/ public static String createImg(String message, int width, int height) {String img = "";try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){//創建畫布BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//得到它的繪制環境(這張圖片的筆)Graphics2D g2 = (Graphics2D) bi.getGraphics();//設置透明背景bi = g2.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);g2 = bi.createGraphics();ClassPathResource resource = new ClassPathResource("resources/font/SourceHanSansCN-Normal.ttf");InputStream fis = resource.getInputStream();Font font = java.awt.Font.createFont(java.awt.Font.TRUETYPE_FONT, fis);font = font.deriveFont(Font.PLAIN, 90);//設置字體:字體、字號、大小g2.setFont(font);//設置背景顏色g2.setColor(Color.red);int locY = g2.getFontMetrics().getHeight();drawString(g2, message, 0, locY, width - g2.getFontMetrics().charWidth(' '));// 輸出png圖片ImageIO.write(bi, "png", outputStream);img = Base64.encode(outputStream.toByteArray());g2.dispose();} catch (IOException | FontFormatException e) {e.printStackTrace();}return img; }/*** Graphic2D文本繪制換行,多行繪制** @param g Graphics2D畫筆實例* @param strContent 需要繪制的文本內容* @param rowWidth 一行的總寬度(像素)* @param startX X坐標起始點(像素)* @param startY Y坐標起始點(像素)*/ public static void drawString(Graphics g, String strContent, int startX, int startY, int rowWidth){//每行間距(像素)int heightSpace = 2;//獲取畫筆的字體Font font = g.getFont();//通過JLabel獲取文本的總長度和總高度JLabel jLabel = new JLabel(strContent);jLabel.setFont(font);FontMetrics fontMetrics = jLabel.getFontMetrics(font);int textLength = strContent.length();//一行的總長度,用于判斷是否超出了范圍int totalWidth = fontMetrics.stringWidth(strContent);//計算一行的高度int textHeight = fontMetrics.getHeight();if (totalWidth > rowWidth) {// 總長度超過了整個長度限制//已經寫了多少行int alreadyWriteLine = 0;//目前一行寫的長度int nowWidth = 0;for (int i = 0; i < textLength; i++) {//獲取單個字符的長度int oneWordWidth = fontMetrics.charWidth(strContent.charAt(i));//判斷目前的一行加上這個字符的長度是否超出了總長度int tempWidth = oneWordWidth + nowWidth;if (tempWidth > rowWidth) {//如果超出了一行的總長度,則要換成下一行nowWidth = 0;alreadyWriteLine++;int writeY = startY + alreadyWriteLine * (textHeight + heightSpace);g.drawString(strContent.charAt(i) + "", startX + nowWidth, writeY);nowWidth = oneWordWidth;} else {//當前行長度足夠,可以直接畫int writeY = startY + alreadyWriteLine * (textHeight + heightSpace);g.drawString(strContent.charAt(i) + "", startX + nowWidth, writeY);nowWidth = tempWidth;}}} else {//沒有超過限制,直接畫g.drawString(strContent, startX, startY);} }總結
以上是生活随笔為你收集整理的springboot生成图片并在图片上添加字体进行换行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5背景图片居中
- 下一篇: 童话用计算机,电脑争功童话作文