Подтвердить что ты не робот

Как работают алгоритмы преобразования изображений ASCII?

Есть несколько хороших бесплатных сайтов преобразования изображений "изображение в ASCII", таких как: ASCII-art.org

Как работает такой алгоритм преобразования изображений?

                         ,                     
                     .   W    ,                
                     W   W    @                
                     W  ,W    W                
                  ,  W, :W*  .W  .             
                  #  WW @WW  WW  #             
                  W  WW.WWW  WW: W             
                  W. WW*WWW# [email protected] W             
               * :[email protected]@W  #          
              +* #WW#WWWWWWWWWWWWW# W          
              W# @WWWWWWWWWWWWWWWWW W          
              WW WWWWWWWWWWWWWWWWWW W          
              WW [email protected]#         
             ,WW.WWWWWWWWWWWWWWWWWWWWW         
              [email protected]         
            : WWWWWWWWWWWWWWWWWWWWWWWW :       
            @ [email protected]@@WWWWWW.        
            W*WWWWWW::::@WWW:::::#WWWWW        
            [email protected]::   :+*:.   ::@WWWW        
            [email protected]:*:.::     .,.:.:WWWW        
            @WWWW#:.:::.     .:: #:@WWW        
            :[email protected]:#. ::     :WWWW:@WWWW        
             WWW#*:[email protected]*@W     .   W:#WWW        
            #WWWW:@      ::   ::  *WWWW        
            [email protected]*W  .::,.::::,:+  @@WW#,       
            WWWW## ,,.: .:::.: .  .WWW:,       
            @[email protected]:   W..::::: #.  :WWWW        
             WWWW::  *..:.  ::.,. :WWWW        
             WWWW:: :.:.:   :  :: ,@[email protected]        
             WWWW:  .:,  :  ,,     :WW,        
             .: #         :  ,     : *         
              W +    .,  :::  .,   : @         
              W ::                .: W         
           @,,,W:.  ,, ::*@*:,  . :@W.,,@      
         +.....*: : : .#WWWWW:  : .#:....+,    
        @...:::*:,, : :WWWWWWW, ,  *::::..,#   
      :...::::::W:,   @W::::*W.   :W:::::...#  
     @@@@@@@@@@@[email protected]@@@@[email protected]@@@@@[email protected]@@@@[email protected]@@@@@@@@@:

4b9b3361

Ответ 1

Концепция большого изображения проста:

  • Каждому печатаемому символу может быть присвоено приблизительное значение шкалы серого; Знак "at" @, очевидно, визуально более темный, чем знак "плюс" +, например. Эффект будет варьироваться в зависимости от используемого шрифта и интервала.

  • На основе пропорций выбранного шрифта группируйте входное изображение в прямоугольные пиксельные блоки с постоянной шириной и высотой (например, прямоугольник шириной 4 пикселя и высотой 5 пикселей). Каждый такой блок станет одним символом на выходе. (Используя только что упомянутые пиксельные блоки, изображение 240w-x-320h станет 64 строками из 60 символов.)

  • Вычислить среднее значение шкалы серого для каждого пиксельного блока.

  • Для каждого пиксельного блока выберите символ, значение шкалы серого (с шага 1) является хорошим приближением среднего значения пиксельного блока (с шага 3).

Это простейшая форма упражнения. Более сложная версия также учитывает фактические формы символов при разрыве связей между кандидатами на блок пикселей. Например, "косая черта" (/) будет лучшим выбором, чем "обратная косая черта" (\) для пиксельного блока, который, как представляется, имеет контрастность слева-вверх-справа.

Ответ 2

aalib (последняя версия в 2001 году) - это библиотека ASCII с открытым исходным кодом, которая используется в таких приложениях, как mplayer. Вы можете проверить его исходный код, чтобы узнать, как он это делает. Кроме того, эта страница описывает более подробно о том, как работают такие алгоритмы.

Ответ 3

Также вы можете взглянуть на libcaca (последняя версия 2014), которая, согласно их веб-сайту, имеет следующие улучшения: t21 > :

  • Поддержка Unicode
  • 2048 доступных цветов (некоторые устройства могут обрабатывать только 16)
  • сглаживание цветных изображений
  • расширенные операции холста текста (биение, поворот)

Ответ 4

Я нашел эту статью CodeProject, написанную Даниэлем Фишером, содержащую простую реализацию С# изображения для преобразования ASCII art алгоритм.

Это шаги, которые выполняет программа/библиотека:

  • Загрузите поток изображения в растровый объект
  • Оттенки серого в растровом изображении с использованием объекта Graphics
  • Прокручивайте пиксели изображения (потому что нам не нужен один символ ASCII на пиксель, мы берем один на 10 x 5)
  • Чтобы каждый пиксель влиял на итоговый ASCII char, мы зацикливаем их и вычисляем яркость суммы текущего блока 10 x 5.
  • Наконец, добавьте разные ASCII-символы, основанные на текущем блоке, на вычисленную сумму.

Довольно легко, не так ли?

BTW: В комментариях к статье я нашел эту <сильную > крутую реализацию AJAX: Gaia Ajax ASCII Art Generator:

[...] Я чувствовал себя вынужденным продемонстрировать его можно легко сделать в стандартизованный набор веб-технологий. Я отправился посмотреть, могу ли я найти библиотеки, и я нашел Sau Fan Статья о кодебе ASCII fying.NET library.

P.S.: Lucas (см. комментарии) нашел еще одну статью CodeProject.