这是一个有趣的java列子,先来看下效果吧: $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$ $$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$$$ $$$$ $$$$ $$$$ $$$$ $$$$$$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$$$$ $$$$ $$$$ $$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$$$$ $$$$ $$$$ $$$$ $$$$$$$$$$$$ $$$$$$ $$$$ $$$$ $ $$$$ $$$$ $$$$ $$$$ $$$$$$ $$$$$ $$$$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$$ $$$$ $$$$$$ $$$$ $$$$ $$$$$$$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$$$ $$$$ $$$$ $$$$$$$$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$$$ $$$$ $$$$ $$$$$$$$$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$ $$$$$ $$$$ $$$$ $$$$$ $$$$ $$$$ $$$$$ $$$$ $$$$ $$$$ $$$$$$ $$$$ $$$$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$$$$$$ $$$$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$$$$$$$ $$$$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$$$$$$ $$$$ $$$$ $$$$$$$ $$$$$ $$$$ $$$$$$$ $$$$ $$$$ $$$$ $$$$ $$$ $$$ $$$$ $$$ $$$$ $$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ 实现代码如下: public class ASCIIArt { public static void main(String[] args) throws IOException { int width = 100; int height = 30; //BufferedImage image = ImageIO.read(new File("/users/zhujiajun/ascii-art.png")); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setFont(new Font("SansSerif", Font.BOLD, 24)); Graphics2D graphics = (Graphics2D) g; graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); graphics.drawString("zjiajun", 10, 20); //save this image //ImageIO.write(image, "png", new File("/users/zhujiajun/ascii-art.png")); for (int y = 0; y < height; y++) { StringBuilder sb = new StringBuilder(); for (int x = 0; x < width; x++) { sb.append(image.getRGB(x, y) == -16777216 ? " " : "$"); } if (sb.toString().trim().isEmpty()) { continue; } System.out.println(sb); } } } -16777216这是什么玩意? 其实是颜色代码(256 * 256 * 256),在这个列子中”-16777216”被替换为空的字符串“ ”。可以读取保存的图片,并且打印出rgb color,会发现不同的颜色会有不同的代码。 英文原文链接 原创文章转载请注明出处: 用Java生成ASCII艺术字