java Graphics2D繪製文字並居中並解決伺服器亂碼問題
阿新 • • 發佈:2019-02-10
此 Graphics2D 類擴充套件 Graphics 類,以提供對幾何形狀、座標轉換、顏色管理和文字佈局更為複雜的控制。它是用於在 Java(tm) 平臺上呈現二維形狀、文字和影象的基礎類。
一、在圖片上繪製文字
例項程式碼:
package com.test.testImage;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image .BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Graphics2DTest {
public static void main(String[] args) {
try {
String text = "文字居中";
int width = 500;
int height = 400;
// 建立BufferedImage物件
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE _INT_RGB);
// 獲取Graphics2D
Graphics2D g2d = image.createGraphics();
// 畫圖
g2d.setBackground(new Color(255,255,255));
//g2d.setPaint(new Color(0,0,0));
g2d.setColor(Color.red);
g2d.clearRect(0, 0, width, height);
Font font=new Font("宋體" ,Font.PLAIN,64);
g2d.setFont(font);
// 抗鋸齒
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 計算文字長度,計算居中的x點座標
FontMetrics fm = g2d.getFontMetrics(font);
int textWidth = fm.stringWidth(text);
int widthX = (width - textWidth) / 2;
// 表示這段文字在圖片上的位置(x,y) .第一個是你設定的內容。
g2d.drawString(text,widthX,100);
// 釋放物件
g2d.dispose();
// 儲存檔案
ImageIO.write(image, "jpg", new File("D:/test.jpg"));
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
二、解決伺服器部署圖片文字亂碼問題
在Windows系統上,文字顯示正常,當專案部署到Linux系統上時,中文全部變成了口口口這種方框。我們使用的文字是Font font=new Font(“宋體”,Font.PLAIN,64);。出現的原因是因為在Linux上沒有中文宋體或者沒有中文其他文字的字型庫,需要我們匯入。
(1)查詢Windows系統(本地)的文字包
查詢路勁C:\Windows\Fonts
本地是一個ttc檔案,我們需要修改檔案字尾,改為ttf。
(2)將ttf檔案匯入到linux系統java的fonts包中。
注:路徑是你Linux系統java安裝的檔案,根據你的安裝目錄查詢
(3)重啟java或者tomcat生效