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

3
我使用 codiva 在 Chromebook 上编写代码。我想知道是否可以在控制台输出中创建图形。例如,我的文本现在是普通的(它作为纯文本在控制台中打印)。如果我只能在控制台输出(没有画布、Jframe、弹出窗口等),是否有办法加粗、强调或甚至改变文本的颜色?
我尝试过 "\u001B[1m(粗体文本)",但只得到了这个效果(见输出)。倾斜的效果也是一样的。 输出:
2个回答

3

控制序列的解释取决于具体的控制台,而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的控制台中。 它的局限性在于只适用于字母。但是对于突出重要单词,它可能已经足够了。

谢谢!能否给文本上色? - FairOPShotgun
1
有一些代码点可以像 或者 一样呈现彩色,但它们并没有覆盖整个字母表,因此将文本翻译为这些代码点是不切实际的。此外,它们的外观并不是你所考虑的彩色文本,我想,而是带有彩色框的字母,其框架之所以被着色是由于某种原因(与其他带框字母如 、 、 不同)。 - Holger
我该如何使字母变成彩色,哪些字母可以变成彩色?您能否编辑您的答案并包含这个问题?我只是好奇。如果太麻烦了,没关系。 - FairOPShotgun
1
您可以使用https://onlineunicodetools.com/generate-unicode-letters来查看表示拉丁字母的代码点,以确定哪些转换是可能的。正如您在那里所看到的,只有一个彩色框。我认为这并不值得努力。此外,并非所有映射都像此答案中进行的转换一样直截了当。对于其他映射,您需要包含一个明确的映射表,其中包含每个字符的条目。 - Holger
好的,如果只有几个字母,我就不会费心了。 - FairOPShotgun

1
使用 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接