java 图片上绘制文字Graphics2D linux 中文乱码

简介: java 图片上绘制文字Graphics2D linux 中文乱码

解决方式1:

windows上的字体拷贝到linux上。

解决方式2:

本地java读写字体。

网上时候还有这个问题,不过我还没遇到:

https://blog.csdn.net/weixin_34294809/article/details/114301980?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link

3.个人解决此问题的完整代码:

public InputStream createDistributorSharePosterInputstream(String bgOriginUrl, String wechatNickName, String wechatAvatarUrl, String wechatRecomQrcodeUrl) {
        try {
            BufferedImage bimg = getUrlByBufferedImage(bgOriginUrl);
//            String pathString = FontLoader.class.getResource("/font/msyhbd.ttf").getFile();
//            Font font2 = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));
            Font  font1 = null;
            GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
//            if(localGraphicsEnvironment.getAvailableFontFamilyNames() == null ||  localGraphicsEnvironment.getAvailableFontFamilyNames().length == 0 ){
                Font font = Font.createFont(Font.TRUETYPE_FONT, ImageGenerateUtil.class.getResourceAsStream("/font/msyhbd.ttf"));
                font1 = font.deriveFont(Font.BOLD,24f);
                localGraphicsEnvironment.registerFont(font);
//            }else{
//                font1 = new Font(typeface, Font.BOLD, 24);
//            }
            // 开启画图
            Graphics2D g2d = localGraphicsEnvironment.createGraphics(bimg);
            // 抗锯齿
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            //用户头像
            BufferedImage userLogo = getSque(getUrlByBufferedImage(wechatAvatarUrl));
            g2d.drawImage(setRadius(userLogo, 3), 336, 1064, 80, 80, null);
            //用户昵称
//            Font  font1 = font.deriveFont(Font.BOLD,24f);
            g2d.setFont(font1);
            g2d.setColor(Color.WHITE);
            // 计算文字长度,计算居中的x点坐标
            drawString(wechatNickName, bimg, g2d, font1, 1174);
            //推荐语
//            font2 = new Font(typeface, Font.BOLD, 24);
            g2d.setFont(font1);
            g2d.setColor(Color.WHITE);
            drawString("邀请您成为飞碟推荐官", bimg, g2d, font1, 1202);
            //太阳码
            Image sunCodeUrlImage = getUrlByBufferedImage(wechatRecomQrcodeUrl);
            g2d.drawImage(sunCodeUrlImage, 604, 1258, 100, 100, null);
            // 释放对象
            g2d.dispose();
            return upload(bimg);
        } catch (Exception e) {
            e.printStackTrace();
            log.info("goodsCard:{}", e.getMessage());
        }
        return null;
    }

相关文章
|
1月前
|
Java
java通过commons-fileupload实现多张图片的上传(servlet)
java通过commons-fileupload实现多张图片的上传(servlet)
23 2
|
1月前
|
存储 Java 计算机视觉
Java代码居然可以做出如此高级的图片编辑系统
Java代码居然可以做出如此高级的图片编辑系统
29 0
|
1月前
|
编解码 Java Apache
Java中文乱码浅析及解决方案
Java中文乱码浅析及解决方案
50 0
|
1月前
|
前端开发 Java
java通过commons-fileupload实现多张图片的上传(jsp页面)
java通过commons-fileupload实现多张图片的上传(jsp页面)
16 2
|
2月前
|
Java Linux
手把手教你Linux系统下的Java环境配置,简单到不行!
手把手教你Linux系统下的Java环境配置,简单到不行!
84 1
|
19天前
|
监控 Java Linux
linux下监控java进程 实现自动重启服务
linux下监控java进程 实现自动重启服务
|
30天前
|
缓存 Linux Windows
Linux下安装宋体以及微软雅黑字体-转PDF后不显示中文,以及中文乱码
Linux下安装宋体以及微软雅黑字体-转PDF后不显示中文,以及中文乱码
51 0
|
1月前
|
Java
java中复制图片
java中复制图片
10 2
|
1月前
|
文字识别 Java Maven
java调用tess4j识别图像中的文字
java调用tess4j识别图像中的文字
27 3
|
1月前
|
Ubuntu Linux Shell
Linux的中文乱码问题解决方法
Linux的中文乱码问题解决方法