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

上一篇介绍了在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程序员——学习是最好的投资

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值