문제

거기에 몇 가지 좋은"무료 이미지를 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@@@@@@@@@@:

도움이 되었습니까?

해결책

큰 그림 수준의 개념은 간단하다:

  1. 각 인쇄할 수 없는 문자에 할당할 수 있는 대략적인 그레이스케일 값;"at"등록 @ 분명히 시각보다 어두운"플러스"등록 +, 예를 들어,.효과에 따라 다릅니다 글꼴 및 간격이 실제로 사용됩니다.

  2. 기반의 비율을 선택한 폰트,그룹 입력 직사각형으로 이미지 픽셀 블록으로 일정한 높이와 폭(예:사각형 4 픽셀 5 높은 픽셀).이러한 각 블록의 하나가 될 것이 문자가 출력됩니다.(를 사용하는 픽셀의 블록은 그냥 언급했듯이,240w-x-320h 이미지가 될 것입 64 라인의 60 자입니다.)

  3. 컴퓨팅 평균 회색조 값을 각 픽셀의 블록입니다.

  4. 각 픽셀의 블록,문자를 선택하는 누구의 회색조 값을(1 단계)는 좋은 근사치의 픽셀 블록의 평균(3 단계).

는 가장 단순한 형태의 운동입니다.더 정교한 버전을 실제 문자의 계정으로 깨는 경우 관계를 중 후보자를 위한 화소 구획입니다.예를 들어,"slash"(/ 도)보다 더 나은 선택이 될를"뒤에 슬래쉬"(\ 는)화가 나타나는 아래 왼쪽에서 오른쪽 상단 대비 기능입니다.

다른 팁

알리브 (2001 년 마지막 릴리스)는 MPLAYER와 같은 응용 프로그램에 사용되는 오픈 소스 ASCII 아트 라이브러리입니다. 소스 코드를 확인하여 어떻게 작동하는지 확인할 수 있습니다. 그 이외의, 이 페이지 이러한 알고리즘의 작동 방식에 대해 자세히 설명합니다.

또한할 수 있는 살펴보 libcaca (최 2014),이는 주문에 따라 그들의 웹 사이트는 다음과 같은 개선 aalib:

  • 유니코드 지원
  • 2048 사용 가능한 색상(일부 장치할 수 있습 onlyhandle16)
  • 당황의 컬러 이미지
  • 고급 텍스트 캔버스 작업(블리팅,회전)

나는 이것을 찾았다 Daniel Fisher가 작성한 Codeproject 기사 간단한 C# 구현 ASCII ART 변환 알고리즘에 대한 이미지.

프로그램/라이브러리가 수행하는 단계입니다.

  1. 이미지 스트림을 비트 맵 객체에로드하십시오
  2. 그래픽 객체를 사용하여 비트 맵을 그레이 스케일
  3. 이미지의 픽셀을 통과하는 루프 (픽셀 당 ASCII 문자 하나를 원하지 않기 때문에 10 x 5 당 1 개를 가져옵니다)
  4. 모든 픽셀이 결과 ASCII 숯에 영향을 미치기 위해, 우리는 그것들을 반복하고 현재 10 x 5 블록의 양의 밝기를 계산합니다.
  5. 마지막으로, 계산 된 양의 현재 블록을 기반으로 다른 ASCII 문자를 추가하십시오.

아주 쉽지 않습니까?

BTW : 기사에 대한 의견에서 나는 이것을 발견했다. 멋진 ajax 구현: Gaia ajax ascii 아트 생성기:

...] 표준화 된 웹 기술 세트에서 쉽게 수행 할 수 있음을 보여 주어야한다고 느꼈습니다. 나는 사용할 라이브러리를 찾을 수 있는지 확인하기 시작했고, 그의 ascii fying .net 라이브러리에 관한 Sau Fan Lee의 CodeProject 기사를 찾았습니다.

추신 : Lucas (의견 참조)가 다른 것을 발견했습니다 Codeproject 기사.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top