解决Linux环境下Java生成图片中文水印乱码问题(有效!!)

本文介绍了在Linux服务器上,Java生成带有中文水印的图片时出现乱码的问题。问题根源在于字体文件在服务器环境中缺失。通过将字体文件放入项目静态资源目录或服务器,读取字体文件来解决乱码。提供了加载字体文件的代码示例,确保在任何环境下都能正确显示水印。
摘要由CSDN通过智能技术生成

前言

前不久在项目中做了一个对图片添加水印的功能,这功能也上线了半个多月了,今天还没到公司的时候突然有个消息说水印信息显示不出来,如图:
在这里插入图片描述
显而易见就是乱码问题,因为代码中使用的字体,在服务器环境中该字体不存在,本地环境(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 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值