어떻게 ASCII art 이미지 변환 알고리즘을 작동하는가?[마감]
문제
거기에 몇 가지 좋은"무료 이미지를 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@@@@@@@@@@:
해결책
큰 그림 수준의 개념은 간단하다:
각 인쇄할 수 없는 문자에 할당할 수 있는 대략적인 그레이스케일 값;"at"등록
@
분명히 시각보다 어두운"플러스"등록+
, 예를 들어,.효과에 따라 다릅니다 글꼴 및 간격이 실제로 사용됩니다.기반의 비율을 선택한 폰트,그룹 입력 직사각형으로 이미지 픽셀 블록으로 일정한 높이와 폭(예:사각형 4 픽셀 5 높은 픽셀).이러한 각 블록의 하나가 될 것이 문자가 출력됩니다.(를 사용하는 픽셀의 블록은 그냥 언급했듯이,240w-x-320h 이미지가 될 것입 64 라인의 60 자입니다.)
컴퓨팅 평균 회색조 값을 각 픽셀의 블록입니다.
각 픽셀의 블록,문자를 선택하는 누구의 회색조 값을(1 단계)는 좋은 근사치의 픽셀 블록의 평균(3 단계).
는 가장 단순한 형태의 운동입니다.더 정교한 버전을 실제 양 문자의 계정으로 깨는 경우 관계를 중 후보자를 위한 화소 구획입니다.예를 들어,"slash"(/
도)보다 더 나은 선택이 될를"뒤에 슬래쉬"(\
는)화가 나타나는 아래 왼쪽에서 오른쪽 상단 대비 기능입니다.
다른 팁
또한할 수 있는 살펴보 libcaca
(최 2014),이는 주문에 따라 그들의 웹 사이트는 다음과 같은 개선 aalib
:
- 유니코드 지원
- 2048 사용 가능한 색상(일부 장치할 수 있습 onlyhandle16)
- 당황의 컬러 이미지
- 고급 텍스트 캔버스 작업(블리팅,회전)
나는 이것을 찾았다 Daniel Fisher가 작성한 Codeproject 기사 간단한 C# 구현 ASCII ART 변환 알고리즘에 대한 이미지.
프로그램/라이브러리가 수행하는 단계입니다.
- 이미지 스트림을 비트 맵 객체에로드하십시오
- 그래픽 객체를 사용하여 비트 맵을 그레이 스케일
- 이미지의 픽셀을 통과하는 루프 (픽셀 당 ASCII 문자 하나를 원하지 않기 때문에 10 x 5 당 1 개를 가져옵니다)
- 모든 픽셀이 결과 ASCII 숯에 영향을 미치기 위해, 우리는 그것들을 반복하고 현재 10 x 5 블록의 양의 밝기를 계산합니다.
- 마지막으로, 계산 된 양의 현재 블록을 기반으로 다른 ASCII 문자를 추가하십시오.
아주 쉽지 않습니까?
BTW : 기사에 대한 의견에서 나는 이것을 발견했다. 멋진 ajax 구현: Gaia ajax ascii 아트 생성기:
...] 표준화 된 웹 기술 세트에서 쉽게 수행 할 수 있음을 보여 주어야한다고 느꼈습니다. 나는 사용할 라이브러리를 찾을 수 있는지 확인하기 시작했고, 그의 ascii fying .net 라이브러리에 관한 Sau Fan Lee의 CodeProject 기사를 찾았습니다.
추신 : Lucas (의견 참조)가 다른 것을 발견했습니다 Codeproject 기사.