Сгенерировать изображение ASCII из строки

Я хочу создать программу, в которой пользователь вводит свое имя, а программа генерирует ASCII-изображение своего имени. Можно ли это сделать без использования сторонних инструментов? Я придумал создавать каждую букву в алфавите вручную, а затем преобразовывать строку в массив символов. Затем верните каждое изображение, соответствующее букве. Есть ли лучший или более эффективный способ сделать это?


person Jeel Shah    schedule 17.08.2011    source источник


Ответы (2)


Вы можете записать текст в растровое изображение любым шрифтом и отсканировать растровое изображение для создания изображения 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);
}

записывает изображение

Привет, мир

и печатает

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

изменить на ЖИРНЫЙ

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

курсивом

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

Измените шрифт на SERIF BOLD

   #######   #######             ####   ####                   *######* *######*   ####*                       ####         ####    ***     
    *###*     *###*              *###   *###                    **##**   **##**    ****                        *###         *###    *#*     
     ###       ###                ###    ###                     *##**    **##*     **                          ###          ###    *#*     
     ###       ###                ###    ###                      *##*     *##*    ***                          ###          ###    *#*     
     ###       ###                ###    ###                      *##*     **#**   **                           ###          ###    *#*     
     ###       ###      ******    ###    ###     ******           **##*   ***##*   **     ******    #### ****   ###     *****###    *#*     
     ###       ###     *#***#**   ###    ###    *#****#*           *##*   ***##*   **    *#****#*   *###*###*   ###    *#****###    *#*     
     #############    *##* *##*   ###    ###   *##*  *##*          *##*   ****#** **    *##*  *##*   ###*****   ###   *##*  *###    *#*     
     ###       ###    *##   ##*   ###    ###   *##*  *##*           *##* **  *##* **    *##*  *##*   ###*       ###   *##*   ###    *#*     
     ###       ###    *#######*   ###    ###   *##    ##*           *##* **  *##* **    *##    ##*   ###*       ###   *##    ###    *#*     
     ###       ###    *##*        ###    ###   *##    ##*           *##***   **##**     *##    ##*   ###        ###   *##    ###    *#      
     ###       ###    *##*        ###    ###   *##    ##*            *##**    *##**     *##    ##*   ###        ###   *##    ###            
     ###       ###    *##*   **   ###    ###   *##*  *##*            *##**    *###*     *##*  *##*   ###        ###   *##*   ###            
     ###       ###    *##** ***   ###    ###   *##*  *##*            **#*      *#*      *##*  *##*   ###        ###   *##*  *###*   ***     
    *###*     *###*    *#####*   *###*  *###*   *#****#*              *#*      *#*       *#****#*   *###*      *###*  **#****####   *#*     
   #######   #######   ******    #####  #####    ******               ***      *#*        ******    #####      #####   **********   ***     
person Peter Lawrey    schedule 17.08.2011

Эта задача решается в четыре шага.

  1. Создайте художественное представление ascii (в виде двумерного прямоугольного массива) для каждой буквы, которую вы собираетесь поддерживать. Возможно, они загружаются из файла ресурсов.
  2. Разберите входную строку на токены символов и получите изображения для этих символов.
  3. Создайте прямоугольный массив, высота которого равна самой высокой лексеме, а ширина равна сумме ширины каждой лексемы (плюс пробел между символами, если он не включен в сами изображения).
  4. Скопируйте каждый в гигантский массив в правильном месте.
person corsiKa    schedule 17.08.2011