前言
前不久在项目中做了一个对图片添加水印的功能,这功能也上线了半个多月了,今天还没到公司的时候突然有个消息说水印信息显示不出来,如图:
显而易见就是乱码问题,因为代码中使用的字体,在服务器环境中该字体不存在,本地环境(Windows)该字体存在,所以出现了如图的情况,从网上找了各种解决方案,也最终找到了一种比较简单和靠谱有效的方案:服务器添加字体文件.ttc,读取服务器字体文件.ttc,也可以直接把字体文件放入项目静态资源目录(static),直接读取static目录下的字体文件,话不多说贴代码!!
1.问题重现
下面在本地环境来重现出现乱码的问题
public class WaterMarkUtils {
/**
* @param args
*/
public static void main(String[] args) {
Color color=new Color(255,255,255,128); //水印图片色彩以及透明度
// 原图位置, 输出图片位置, 水印文字颜色, 水印文字 C:\Users\LSH\Pictures
new WaterMarkUtils().mark(new File("C:/Users/XXX/Pictures/IMG_1479.JPG"),"C:/Users/XXX/Pictures/IMG_1479.JPG", "C:/Users/XXX/Desktop/kdmt1.jpg",
Color.red, "2020:09:14 21:38:18", "上海市上海市黄浦区");
}
/**
* 图片添加水印
*/
public void mark(File file,String srcImgPath, String outImgPath, Color markContentColor, String date,String waterMarkContent) {
try {
// 读取原图片信息
//File srcImgFile = new File(srcImgPath);
Image srcImg = ImageIO.read(file);
int srcImgWidth = srcImg.getWidth(null);
int srcImgHeight = srcImg.getHeight(null);
// 加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g