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


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

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

                         ,                     
                     .   W    ,                
                     W   W    @                
                     W  ,W    W                
                  ,  W, :W*  .W  .             
                  #  WW @WW  WW  #             
                  W  WW.WWW  WW: W             
                  W. WW*WWW# WW@ W             
               * :WW.WWWWWWW@WWW@W  #          
              +* #WW#WWWWWWWWWWWWW# W          
              W# @WWWWWWWWWWWWWWWWW W          
              WW WWWWWWWWWWWWWWWWWW W          
              WW WWWWWWWWWWWWWWWWWW@W#         
             ,WW.WWWWWWWWWWWWWWWWWWWWW         
              WW@WWWWWWWWWWWWWWWWWWWWW         
            : WWWWWWWWWWWWWWWWWWWWWWWW :       
            @ WWWWWWWW@WWWWWWW@@WWWWWW.        
            W*WWWWWW::::@WWW:::::#WWWWW        
            WWWWWW@::   :+*:.   ::@WWWW        
            WWWWW@:*:.::     .,.:.:WWWW        
            @WWWW#:.:::.     .:: #:@WWW        
            :WWW@:#. ::     :WWWW:@WWWW        
             WWW#*:W@*@W     .   W:#WWW        
            #WWWW:@      ::   ::  *WWWW        
            W@WW*W  .::,.::::,:+  @@WW#,       
            WWWW## ,,.: .:::.: .  .WWW:,       
            @WWW@:   W..::::: #.  :WWWW        
             WWWW::  *..:.  ::.,. :WWWW        
             WWWW:: :.:.:   :  :: ,@WW@        
             WWWW:  .:,  :  ,,     :WW,        
             .: #         :  ,     : *         
              W +    .,  :::  .,   : @         
              W ::                .: W         
           @,,,W:.  ,, ::*@*:,  . :@W.,,@      
         +.....*: : : .#WWWWW:  : .#:....+,    
        @...:::*:,, : :WWWWWWW, ,  *::::..,#   
      :...::::::W:,   @W::::*W.   :W:::::...#  
     @@@@@@@@@@@W@@@@@W@@@@@@W@@@@@W@@@@@@@@@@:

4 54

4 ответа:

концепция уровня большой картины проста:

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

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

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

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

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

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

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

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

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

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

  1. загрузите поток изображений в растровый объект
  2. оттенки серого растровое изображение с помощью графического объекта
  3. петля через пиксели изображения (потому что мы не хотим один символ ASCII на пиксель, мы берем один за 10 х 5)
  4. чтобы каждый пиксель влиял на результирующий символ ASCII, мы зацикливаем их и вычисляем яркость количества текущего блока 10 x 5.
  5. наконец, добавьте различные символы ASCII, основанные на текущем блоке, на вычисленной сумме.

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

кстати: в комментариях к статье я нашел это классная реализация AJAX:Gaia Ajax ASCII Art Генератор:

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

С. П.: Лукас (см. комментарии) нашли другое статья CodeProject.