图片添加水印中文乱码
一级目录二级目录
水印中文乱码水印上传代码问题原因1、以上代码在本地win10运行一切正常,把代码布置到linux上跑出的图片如下,中文部分会乱码2 原因出在这里,我们设置的字体类型是“Helvetica Regular”(或者微软雅黑),而Helvetica Regular字体,找不到对应的字库,所以中文会乱码。
解决问题1、进入服务器jdk字体库,/usr/java/jdk1.8.0_91/jre/lib/fonts2、把字体库拷贝进去重启服务3、字体库下载
一级目录
二级目录
水印中文乱码
水印上传代码
/**
*
* @param srcImgPath 原图片的路径
* @param tarImgPath 新图片的路径
* @param watermarkContent 水印的内容
* @param color 水印的颜色
* @param font 水印的字体
*/
public static void addWatermark(String srcImgPath, String tarImgPath, String watermarkContent, Color color, Font font) {
try {
srcImgPath= URLDecoder.decode(srcImgPath,"utf-8");
tarImgPath= URLDecoder.decode(tarImgPath,"utf-8");
//获取图片文件
File srcImgfile = new File(srcImgPath);
//把文件转换成图片
Image srcImg = ImageIO.read(srcImgfile);
//获取图片的宽和高
int srcImgwidth = srcImg.getWidth(null);
int srcImgheight = srcImg.getHeight(null);
//画水印需要一个画板 创建一个画板
BufferedImage buffImg = new BufferedImage(srcImgwidth,srcImgheight, BufferedImage.TYPE_INT_RGB);
//创建一个2D的图像
Graphics2D g = buffImg.createGraphics();
//画出来
g.drawImage(srcImg, 0, 0, srcImgwidth, srcImgheight,null);
//设置水印的颜色
g.setColor(color);
//设置水印坐标
//设置透明 end
int[] sizes = new int[]{60, 30, 20, 16, 14, 12, 9, 8, 6};
int contentLength = 0;
for (int i = 0; i < 8; i++) {
//设置字体及大小
font = new Font("Helvetica Regular", Font.BOLD, sizes[i]);
//设置水印的字体
g.setFont(font);
g.drawRect(0, 0, 0, 0);
contentLength = getwaterMarkLength(watermarkContent,g);
if (contentLength < (srcImgwidth/1)) {//字体太小可能会造成乱码
// if (contentLength < (srcImgwidth/2)) {
//找到最合适的字体
break;
}
}
int x = srcImgwidth*20/20 -contentLength;
int y = srcImgheight*9/10;
//根据获取的坐标 在相应的位置画出水印
g.drawString(watermarkContent, x, y);
//释放画板的资源
g.dispose();
//获取图片文件
File tarImgFile = new File(tarImgPath);
//输出新的图片
FileOutputStream outputStream = new FileOutputStream(tarImgFile);
//创建新的图片
ImageIO.write(buffImg, "jpg", outputStream);
System.out.println(watermarkContent+",水印添加完成!");
//刷新流
outputStream.flush();
//关闭流
outputStream.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
问题原因
1、以上代码在本地win10运行一切正常,把代码布置到linux上跑出的图片如下,中文部分会乱码
2 原因出在这里,我们设置的字体类型是“Helvetica Regular”(或者微软雅黑),而Helvetica Regular字体,找不到对应的字库,所以中文会乱码。
//设置字体及大小
font = new Font("Helvetica Regular", Font.BOLD, sizes[i]);
解决问题
1、进入服务器jdk字体库,/usr/java/jdk1.8.0_91/jre/lib/fonts
2、把字体库拷贝进去重启服务
3、字体库下载
https://download.csdn.net/download/qq_35928749/13010622