图片添加水印中文乱码

it2025-12-07  4

图片添加水印中文乱码

一级目录二级目录 水印中文乱码水印上传代码问题原因1、以上代码在本地win10运行一切正常,把代码布置到linux上跑出的图片如下,中文部分会乱码2 原因出在这里,我们设置的字体类型是“Helvetica Regular”(或者微软雅黑),而Helvetica Regular字体,找不到对应的字库,所以中文会乱码。 解决问题1、进入服务器jdk字体库,/usr/java/jdk1.8.0_91/jre/lib/fonts2、把字体库拷贝进去重启服务![在这里插入图片描述](https://img-blog.csdnimg.cn/20201022131046977.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1OTI4NzQ5,size_16,color_FFFFFF,t_70#pic_center)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

最新回复(0)