日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot生成图片并在图片上添加字体进行换行

發布時間:2024/3/24 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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生成图片并在图片上添加字体进行换行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。