Ascii Art – Java

我想制作一个程序,用户输入他们的名字,程序会生成一个他们名字的ascii图片。 是否可以在不使用第三方工具的情况下实现这一目标? 我想出的是手动创建字母表中的每个字母,然后将字符串转换为char数组。 然后返回与该字母对应的每个图像。 这样做有更好或更有效的方法吗?

谢谢。

您可以使用任何所需的字体将文本写入位图,并扫描位图以生成ASCII艺术。 您甚至可以使用抗锯齿效果。 ;)


我最后一次这样做是在几十年前。 ;)

BufferedImage image = new BufferedImage(144, 32, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setFont(new Font("Dialog", Font.PLAIN, 24)); Graphics2D graphics = (Graphics2D) g; graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); graphics.drawString("Hello World!", 6, 24); ImageIO.write(image, "png", new File("text.png")); for (int y = 0; y < 32; y++) { StringBuilder sb = new StringBuilder(); for (int x = 0; x < 144; x++) sb.append(image.getRGB(x, y) == -16777216 ? " " : image.getRGB(x, y) == -1 ? "#" : "*"); if (sb.toString().trim().isEmpty()) continue; System.out.println(sb); } 

写出一张图片

你好,世界

和打印

  ## ## ## ## *#* *##** *#* ## ## ## ## ## ## ## *#* *###* *#* ## ## ## ## ## ## ## *#* *#*#* *#* ## ## ## ## ## ## ## *#* ******* *#* ## ## ## ## ## ******* ## ## ******* *#* *#* *#* *#* ******* ##**** ## ****** ## ## ## ## **#####** ## ## **#####** *#* *#* *#* *#* **#####** ##*##* ## **#####*## ## ## ## **#*****#** ## ## **#** **#** *#* **#* *#* *#* **#** **#** ##**** ## **#** ***## ## ############# *#* *#* ## ## *#* *#* *#* *#* *#* *#* *#* *#* ##* ## *#* *## ## ############# *#* *#* ## ## *#* *#* **** *#* *#* **** *#* *#* ##* ## *#* *## ## ## ## *#########* ## ## *#* *#* *#* *#* *#* *#* *#* *#* ## ## *#* *## ## ## ## *#########* ## ## *# #* *#* *#* *#* *#* *# #* ## ## *# ## ## ## ## *#* ## ## *#* *#* *#* *#* *#* *#* *#* *#* ## ## *#* *## ## ## ## *#* ## ## *#* *#* *****#* *#***** *#* *#* ## ## *#* *## ## ## ## *#* *#* ## ## *#* *#* *#*#* *#*#* *#* *#* ## ## *#* *## ## ## **#** ***** ## ## **#** **#** *#*#* *#*#* **#** **#** ## ## **#** ***## ## ## **######* ## ## **#####** *###* *###* **#####** ## ## **#####*## ## ## ## ******* ## ## ******* *##** **##* ******* ## ## ****** ## ## 

改为BOLD

  ### ### ### ### *##* *###* *##* ### ### # ### ### ### ### *##* *###* *##* ### ### # ### ### ### ### *##* *###* *##* ### ### # ### ### ### ### **##* **###** *##** ### ### # ### ### ******* ### ### ******* *##* *##*##* *##* ******* ###**** ### ****** ### * ### ### **#####** ### ### **#######** *##* *##*##* *##* **#######** ###*##* ### **#####*### * ### ### **#######** ### ### *#########* *##** *#* *#* **#** *#########* #####** ### **########## * ############# *##** **##* ### ### *###** **###* *##* *##* *##* *##* *###** **###* ###** ### *##******### * ############# *##* *##* ### ### *##* *##* *##* *##* *##* *##* *##* *##* ###* ### *##* *### * ############# *#########* ### ### *##* *##* *##* *##* **#* *##* *##* *##* ###* ### *##* *### * ### ### *#########* ### ### ### ##* *##*##* *#**##* ### ##* ###* ### *## ### * ### ### *##* ### ### *##* *##* *##*##* *##*##* *##* *##* ### ### *##* *### * ### ### *##* ### ### *##* *##* *#####* *#####* *##* *##* ### ### *##* *### * ### ### *##*****##* ### ### *###** **###* **###** *###** *###** **###* ### ### *##******### ### ### **########* ### ### *#########* *###* *###* *#########* ### ### **########## # ### ### **######* ### ### **#######** *###* *###* **#######** ### ### **#####*### # ### ### ******* ### ### ******* *###* *###* ******* ### ### *******### # 

在ITALIC

  *#* *#* *#* *#* *#* *##* **#* *#* *#* *#* *#* *#* *#* *#* *#* *###* *#* *#* *#* *#* *#* *#* *#* *#* *#* *###* **#* *#* *#* *#* *#* *#* *#* *#* *#* *#**#* *#* *#* *#* *#* **** *#* ******* **** **** ******* *#* *#**#* **** ******* *#* **#* **** ********#* *#* *#* *#* **######* *#* *#* **######* *#* *#***#* *#* **######* *#**###* *#* **####**#** ** *#* *#* **#******#* *#* *#* **#******#* *#* **#* *#* **** **#******#* *#**** *#* *##** **##* *#* *############* **#* *#* *#* *#* **#* *#* *#* *#* *#* *#* **#* *#* *#** *#* **#* **#* *#* **###########** *#* #* **** **** *#* *#* *#* **#* *#* **** *#* *#* **#* **** *#* *#* *#* *#* *#* *##########* *#* *#* *#* #* *#* *#* *#* *#* *#* #* *#** *#* *#* *#* ** *#* *#* *##########* *#* *#* *#* *#* *#* **** *#* *#** *#* *#* *#* *#* *#* *#* ** *#* *#* *# *#* *#* *# *#* *#* *#* *#* *#* *# *#* *#* *#* *# *** ** *#* *#* *#* *#* *#* *#* **#* *#**#** *#**#** *#* **#* *#* *#* *#* *#* ** *#* *#* *#* **** *#* *#* *#* *#** *#**#* *#**#* *#* *#***#* *#* *#* **#* *#* *#* *#*******#* *#* *#* *#*** **##* *###** *###** *#*** **##* *#* *#* *#******##* *#* *#* *######** *#* *#* *######** *###* *###* *######** *#* *#* **#####**#* *#* *#* *#* ******* *#* *#* ******* ##* *##* ******* *#* *#* ********#* *#* 

将字体更改为SERIF BOLD

  ####### ####### #### #### *######* *######* ####* #### #### *** *###* *###* *### *### **##** **##** **** *### *### *#* ### ### ### ### *##** **##* ** ### ### *#* ### ### ### ### *##* *##* *** ### ### *#* ### ### ### ### *##* **#** ** ### ### *#* ### ### ****** ### ### ****** **##* ***##* ** ****** #### **** ### *****### *#* ### ### *#***#** ### ### *#****#* *##* ***##* ** *#****#* *###*###* ### *#****### *#* ############# *##* *##* ### ### *##* *##* *##* ****#** ** *##* *##* ###***** ### *##* *### *#* ### ### *## ##* ### ### *##* *##* *##* ** *##* ** *##* *##* ###* ### *##* ### *#* ### ### *#######* ### ### *## ##* *##* ** *##* ** *## ##* ###* ### *## ### *#* ### ### *##* ### ### *## ##* *##*** **##** *## ##* ### ### *## ### *# ### ### *##* ### ### *## ##* *##** *##** *## ##* ### ### *## ### ### ### *##* ** ### ### *##* *##* *##** *###* *##* *##* ### ### *##* ### ### ### *##** *** ### ### *##* *##* **#* *#* *##* *##* ### ### *##* *###* *** *###* *###* *#####* *###* *###* *#****#* *#* *#* *#****#* *###* *###* **#****#### *#* ####### ####### ****** ##### ##### ****** *** *#* ****** ##### ##### ********** *** 

这个问题通过四个步骤解决。

  1. 为您打算支持的每个字母创建一个ascii艺术表示(作为2d矩形数组)。 也许这些是从资源文件加载的。
  2. 将输入字符串解析为字符标记,并获取这些字符的艺术。
  3. 创建一个与最高标记一样高的矩形数组,与每个标记宽度的总和一样宽(如果不包含在图像本身中,则加上字符之间的空格)。
  4. 将每个复制到正确位置的巨型arrays中。