linux加水印乱码,linux java程序加水印及中文乱码方案(二)

本文介绍了一种在Linux服务器和Docker环境中解决Java程序添加水印时出现中文乱码的方法。通过将字体库文件置于项目资源目录下,避免了环境配置带来的潜在问题,确保了在不同环境下的兼容性。示例代码展示了如何加载自定义字体并用于生成带中文水印的图片。
摘要由CSDN通过智能技术生成

上一篇介绍了在linux, centos图片加水印出现乱码的解决方案,《linux java程序加水印及中文乱码方案》, 在真实项目环境下,一是部署在虚拟机服务器,还有项目部署在docker容器里面,和运维沟通后,第一种解决方案后期更换环境就容易出现疏漏,再说一台服务器下面部署了多个项目,运维担心升级后会影响其它项目,作为开发/技术人员来说,服务器做一下配置更方便,但毕竟是生产, 接下来我们采用新的思路,把字体库文件放在项目某个目录下,例如:friend-new-web/src/main/resources/simsun.ttc

运行Tomcat服务,

java代码:

import java.awt.Font;

import java.io.File;

import java.io.FileInputStream;

import org.springframework.util.Assert;

/**

* 加载中文字体库

*

* @author David

*

*/

public class SystemLoadFont {

/**

* 本地读取方法

* @param path 文件路径

* @param style 字体样式

* @param fontSize 字体大小

* @return

*/

public static java.awt.Font styleFont(String path,int style,float fontSize) {

Assert.notNull(path);

Font font = SystemLoadFont.loadStyleFont(path,style,fontSize);// 调用

return font;

}

/**

*

* @param fontFileName 外部字体名

* @param style 字体样式

* @param fontSize 字体大小

* @return

*/

public static Font loadStyleFont(String fontFileName,int style, float fontSize) {

try{

File file = new File(fontFileName);

FileInputStream in = new FileInputStream(file);

Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, in);

Font dynamicFontPt = dynamicFont.deriveFont(style,fontSize);

in.close();

return dynamicFontPt;

}catch(Exception e) {//异常处理

e.printStackTrace();

return new java.awt.Font("宋体", Font.PLAIN, 20);

}

}

}

java水印代码测试:

import java.awt.Font;

import java.awt.FontMetrics;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageGraphics {

/**

* @param args

*/

public static void main(String[] args) {

//字体文件路径

String simsunPath =

this.getClass().getClassLoader().getResource("simsun.ttc").getPath();

int width = 200;

int height = 200;

String text = "佳友博客";

int x = 0;

int y = 0;

BufferedImage processDiagram = new BufferedImage(100, 100,

BufferedImage.TYPE_INT_ARGB);

Graphics2D g = (Graphics2D) processDiagram.createGraphics();

Font font = SystemLoadFont.styleFont(simsunPath,Font.PLAIN,16f);

g.setFont(font);

FontMetrics fontMetrics = g.getFontMetrics();

int textX = x + ((width - fontMetrics.stringWidth(text)) / 2);

int textY = y + ((height - fontMetrics.getHeight()) / 2)

+ fontMetrics.getHeight();

g.drawString(text, textX, textY);

File outFile = new File("c:/friend365.png");

try {

ImageIO.write(processDiagram, "png", outFile);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}// 写图片

}

}

1.java enum枚举使用场景及优缺点

2. dubbo实现原理机制

3. java程序员——学习是最好的投资

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值