如何在没有 JFrame 的情况下在控制台上输入图形?

How to input graphics on a console without JFrame?

我使用 codiva 在 Chromebook 上进行编码。我只是想知道我是否可以在 控制台 输出中创建图形。例如,我现在的文本是纯文本和普通文本(它在控制台中以纯文本形式打印)。有没有办法加粗强调,如果我只能使用控制台输出(没有canvas, Jframe, popup等)?

我试过“\u001B[1m(粗体)”,但我得到的只是(见输出)。斜体字也一样。

输出:

使用 java.awt.image.BufferedImage

BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();

//.. draw stuff ..

ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("myimage.png"));
writer.write(image);

这可能不适用于所有终端,因为它取决于终端。这是我的回答所依据的文档。 (DOC)

控制序列的解释是特定控制台的主题,codiva.io的控制台似乎不解释任何控制序列。

但是,由于它显示在浏览器中并且浏览器通常具有广泛的 Unicode 支持,因此您可以使用特殊代码点实现有限的格式设置。例如

class HelloCodiva {
    public static void main(String[] args) {
        System.out.println("Formatted: "
            + bold("bold") + " " + italic("italic") + " " + bold(italic("both")));
    }

    static CharSequence bold(CharSequence cs) {
        return trans(cs, 0x1D400, 0x1D41A);
    }

    static CharSequence italic(CharSequence cs) {
        return trans(cs, 0x1D434, 0x1D44e);
    }

    static CharSequence trans(CharSequence cs, int upper, int lower) {
        return cs.codePoints()
            .map(cp -> cp >= 'A' && cp <= 'Z'? cp + upper - 'A':
                       cp >= 'a' && cp <= 'z'? cp + lower - 'a':
                       cp >= 0x1D400 && cp <= 0x1D433? cp + 104:
                       cp >= 0x1D434 && cp <= 0x1D467? cp + 52:
                       cp)
            .collect(StringBuilder::new,
                     StringBuilder::appendCodePoint, StringBuilder::append);
    }
}

打印

Formatted:   

在codiva.io的控制台中。

限制是它只适用于字母。但是对于突出重要的单词,这可能就足够了。