繁体   English   中英

Graphics2D drawString在Java 6之后生成废话字符

[英]Graphics2D drawString produces nonsense characters after Java 6

在使用Java 8将较旧的应用程序迁移到较新的服务器时,出现了此问题:在Java 6中看起来不错的图像中的单词在Java 7和8中变成了无用的字符。

这是我的测试代码:

package test;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import java.io.*;

public class PicTest {

    public static void main(String[] args){
        String testNum = args[0];
        String fileName = "image"+testNum+".jpg";
        String testText = "Test "+testNum;

        BufferedImage image = new BufferedImage(200,200, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = image.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        Font font = new Font("Serif", Font.PLAIN, 24);
        g2.setFont(font);
        g2.drawString(testText, 10, 20);
        File outputfile = new File(fileName);
        try {
            ImageIO.write(image, "jpg", outputfile);
        } catch (Exception e) {
            e.printStackTrace();
        }
   }
}

当我用Java 6运行它时...

$ /usr/local/java/java6/bin/javac test/PicTest.java
$ /usr/local/java/java6/bin/java test/PicTest 4

...这是(预期的,正常的)输出图像: 使用Java 6的测试图像4

当我用Java 7运行它时...

$ /usr/local/java/java7_17/bin/javac test/PicTest.java
$ /usr/local/java/java7_17/bin/java test/PicTest 5

...这是输出图像(带有废话字符): 使用Java 7测试图像5

我使用Java 8获得的图像与Java 7相同。

Java 6表示jdk1.6.0_34 Java 7表示jdk1.7.0_17

我是否应该使用不同的库或进行不同的设置以使其与Java的最新版本一起使用?

在Java 6中,“ Serif”是一种逻辑字体。 物理字体是在某个时候引入的,似乎您的系统上实际上有一个名为“ Serif”的物理字体。 使用不同的物理字体系列。 或暂时使用“ Sans-Serif”。

在Java中,可以遍历所有GrahicsEnvironment的字体

GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
for (String fontName : getAvailableFontFamilyNames()) {
    System.out.println(fontName);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM