Почему буква "o" с Graphics2D.drawString с размером шрифта 101 повреждена? - PullRequest
3 голосов
/ 08 июля 2019

Я хотел бы нарисовать строки в PNG.Мне нужны буквы высотой до 600 пикселей.

Поэтому я попытался использовать Graphics2D.drawString:

    String text = "o";
    graphics.setFont(font.deriveFont(Font.PLAIN, fontsize));
    graphics.drawString(text, 0, 200);

Текст с размером шрифта до 100 работает нормально.Проблема: При размере шрифта 101 некоторые круглые символы (например, «o») становятся немного угловатыми.

Это воспроизводится шрифтами «Abril_Fatface», «Amatic_SC» и «Cinzel_Decorative» (из шрифтов Google, например *).1008 *https://fonts.google.com/specimen/Abril+Fatface или https://fonts.google.com/specimen/Amatic+SC; ttf-файл можно загрузить с помощью «выберите этот шрифт», а затем «загрузить этот раздел» в диалоге «выбрано 1 семейство»).С другими шрифтами строки отображаются ОК.

LibreOffice показывает символы округления (как и ожидалось).

Вот полный код:

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.FontFormatException;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    public class CustomFontWriting {
        public static void main(String[] args) throws FontFormatException, IOException {
            Font font = Font.createFont(Font.TRUETYPE_FONT, new File("Amatic_SC.ttf"));
            // Create empty image
            BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
            Graphics2D graphics = image.createGraphics();
            graphics.setColor(Color.BLACK);
            // Draw letter "o" with fontsize 101 in an image
            graphics.setFont(font.deriveFont(Font.PLAIN, 101));
            graphics.drawString("o", 0, 200);
            // Write image to disk
            File output = new File("output.png");
            ImageIO.write(image, "png", output);
        }
    }

Ожидаемый результат: округлениебуква «о».

enter image description here

Фактический результат: угловая буква «о».

...