java 水印乱码,linux java程序加水印及中文乱码方案
在linux,centos環境下的,生成的帶文字的水印圖片在顯示為方框亂碼。
img.setFont(new Font("宋體", Font.BOLD, 20));
寫中文進入圖片之前必須設置字體,而且這個字體必須支持中文,否則就會出現亂碼或者方框、問號等等。
BufferedImage在內存創建的圖像調用的是服務器端的字體,所以在img.drawString(str, x, y);時,如果服務器端找不到對應的中文字體,那么它就識別不了,最后寫入圖片的中文就變成了亂碼、方框、問號等了。
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageGraphics {
/**
* @param args
*/
public static void main(String[] args) {
int width = 200;
int height = 200;
String text = "佳友博客";
int x = 0;
int y = 0;
BufferedImage processDiagram = new BufferedImage(100, 100,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) processDiagram.createGraphics();
Font font = new Font("宋體", Font.BOLD, 12);
g.setFont(font);
FontMetrics fontMetrics = g.getFontMetrics();
int textX = x + ((width - fontMetrics.stringWidth(text)) / 2);
int textY = y + ((height - fontMetrics.getHeight()) / 2)
+ fontMetrics.getHeight();
g.drawString(text, textX, textY);
File outFile = new File("c:/friend365.png");
try {
ImageIO.write(processDiagram, "png", outFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 寫圖片
}
}
需要將相關的字體文件傳到服務器的jdk下即可, 如果沒有simsun.ttc文件的話,上網搜索一下并下載。
#cd /usr/java/jdk1.7/jre/lib/fonts
#sudo mkdir fallback
將simsun.ttc拷貝到# /usr/java/jdk1.7/jre/lib/fonts/fallback文件夾內
#cp /usr/simsun.ttc?/usr/java/jdk1.7/jre/lib/fonts/fallback
修改完必須重啟服務器才有效。
1.?java enum枚舉使用場景及優缺點
2.?dubbo實現原理機制
3.?java程序員——學習是最好的投資
總結
以上是生活随笔為你收集整理的java 水印乱码,linux java程序加水印及中文乱码方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3 虚拟环境 pip 版本_
- 下一篇: metinfo mysql 数据表_《M