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

在linux,centos环境下的,生成的带文字的水印图片在显示为方框乱码。

img.setFont(new Font("宋体", Font.BOLD, 20));

写中文进入图片之前必须设置字体,而且这个字体必须支持中文,否则就会出现乱码或者方框、问号等等。

BufferedImage在内存创建的图像调用的是服务器端的字体,所以在img.drawString(str, x, y);时,如果服务器端找不到对应的中文字体,那么它就识别不了,最后写入图片的中文就变成了乱码、方框、问号等了。

linux java程序加水印及中文乱码方案_第1张图片

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) {
        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 = new Font("宋体", Font.BOLD, 12);
        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();
        }// 写图片
    }

}

需要将相关的字体文件传到服务器的jdk下即可, 如果没有simsun.ttc文件的话,上网搜索一下并下载。

#cd /usr/java/jdk1.7/jre/lib/fonts

#sudo mkdir fallback

将simsun.ttc拷贝到# /usr/java/jdk1.7/jre/lib/fonts/fallback文件夹内

#cp /usr/simsun.ttc /usr/java/jdk1.7/jre/lib/fonts/fallback


修改完必须重启服务器才有效。

 

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

2. dubbo实现原理机制

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

你可能感兴趣的:(网络编程)