1

ascii 아트 변환기에 많은 이미지를 보았습니다. 그러나 필요한 것은 좀 더 복잡합니다. ascii 문자로 만든 모자이크 이미지 대신 미리 정의 된 일련의 문자열을 모자이크 타일로 사용할 수 있어야합니다.임의의 문자열에서 이미지 생성

나는 인터넷 검색을 잘 해왔지만, 내 쿼리를 구조화하는 방법조차 모르겠다. 이것과 같은 것이 존재합니까? 그리고 보너스는 이미지 생성에 중복을 사용하지 않을 경우입니다.

답변

3

스택 오버 플로우에는 적합하지 않지만 흥미로운 프로젝트입니다. 그래서 나는 약간의 재미를 위해 그것에 가야했고, 내가 얻을 수 있었던 방법을 알았다.

나는이 내려 온다 생각 :

  1. ASCII 문자 세트의 회색 값을 계산;
  2. 각 문자열에 대해 '최적'을 계산합니다.
  3. 반복 2. 끝날 때까지.

아주 작은 이미지와 후보 문자열이 많지 않으면 "중복되지 않음"이 가능하지 않다고 생각합니다. 이것은 내 아바타와 현재의 배지를 문자열 목록으로 사용하여 만들어 낸 것입니다. (내 "C"배지를 제외; 어떻게 든 내 프로그램은 그것이 매우 매력적이었다 큰 패치에 대한 '최적'라고 판단 정신 참고 :.. 1 문자열을 포함하지 않음)

QuorumQuorumAutobiographerQuorumQuorumQuorumJongwareQuorumQuorumQuorumQuorumQuor 
umQuorumQuorumAutobiographerQuorumQuorumSupporterQuorumQuorumProofreaderQuorumQu 
orumQuorumAutobiographerQuorumQuorumQuorumQuorumQuorumQuorumAutobiographerQuorum 
QuorumQuorumAutobiographerQuorumQuorumQuorumQuorumQuorumQuorumAutobiographerQuor 
umQuorumQuorumAutobiographerQuorumQuorumQuorumAutobiographerQuorumMortarboardQuo 
rumQuorumAutobiographerQuorumQuorumQuorumQuorumAutobiographerQuorumMortarboardQu 
orumQuorumAutobiographerQuorumQuorumQuorumQuorumJongwareQuorumQuorumCommentatorQ 
uorumQuorumAutobiographerQuorumQuorumQuorumQuorumQuorumQuorumQuorumAutobiographe 
rQuorumQuorumAutobiographerQuorumQuorumProofreaderJongwareQuorumQuorumQuorumQuor 
umQuorumQuorumMortarboardJongwareQuorumProofreaderCommentatorSuffrageQuorumQuoru 
mQuorumQuorumJongwareQuorumAutobiographerSuffrageCommentatorCaucusCriticCleanupQ 
uorumQuorumMortarboardAutobiographerCommentatorQuorumConstituentCriticCriticQuor 
umQuorumQuorumQuorumAutobiographerJongwareCleanupSupporterInvestorCriticCleanupQ 
uorumQuorumQuorumQuorumAutobiographerFanaticCleanupFanaticInvestorCriticCleanupQ 
uorumQuorumQuorumQuorumAutobiographerCriticInformedSupporterCriticCriticInformed 
QuorumQuorumQuorumQuorumAutobiographerCriticQuorumSupporterInvestorFanaticQuorum 
QuorumQuorumQuorumQuorumAutobiographerCriticCleanupCommentatorQuorumDeputyQuorum 
QuorumQuorumQuorumQuorumAutobiographerCriticInvestorCaucusInformedDeputyQuorumQu 
orumQuorumQuorumQuorumQuorumCommentatorCriticCriticCitizen PatrolQuorumQuorumQuo 
rumQuorumQuorumQuorumQuorumAutobiographerCriticCriticCitizen PatrolQuorumQuorumQ 
uorumQuorumQuorumQuorumQuorumAutobiographerCriticCriticCitizen PatrolStewardQuor 
umQuorumQuorumQuorumQuorumAutobiographerConstituentCitizen PatrolCaucusQuorumQuo 
rumQuorumQuorumQuorumQuorumAutobiographerInvestorCriticConstituentQuorumQuorumQu 
orumQuorumQuorumQuorumQuorumCommentatorConstituentCleanupCaucusCleanupQuorumQuor 
umQuorumQuorumQuorumQuorumAutobiographerInvestorCleanupSupporterInformedQuorumQu 
orumQuorumQuorumAutobiographerCommentatorCriticInformedJongwareJongwareQuorumQuo 
rumQuorumQuorumAutobiographerCommentatorCriticInvestorJongwareJongwareQuorumQuor 
umQuorumQuorumAutobiographerFanaticInvestorCriticInformedCleanupQuorumQuorumQuor 
umQuorumQuorumQuorumDeputySupporterInvestorConstituentCaucusQuorumQuorumQuorumQu 
orumQuorumQuorumAutobiographerCriticInvestorCriticSupporterQuorumQuorumQuorumQuo 
rumQuorumQuorumQuorumAutobiographerInvestorInvestorCleanupQuorumQuorumQuorumQuor 
umQuorumQuorumQuorumQuorumCommentatorInvestorInvestorQuorumQuorumQuorumQuorumQuo 
rumQuorumQuorumQuorumQuorumCommentatorInvestorInvestorQuorumQuorumQuorumQuorumQu 
orumQuorumQuorumQuorumQuorumCommentatorInvestorCleanupStewardQuorumQuorumQuorumQ 
uorumQuorumQuorumQuorumQuorumCommentatorInvestorJongwareQuorumQuorumQuorumQuorum 
QuorumQuorumQuorumQuorumQuorumAutobiographerCleanupQuorumQuorumQuorumQuorumQuoru 
mQuorumQuorumQuorumQuorumQuorumAutobiographerSuffrageQuorumQuorumQuorumQuorumQuo 
rumQuorumQuorumQuorumQuorumQuorumAutobiographerDeputyQuorumQuorumQuorumQuorumQuo 
rumQuorumQuorumQuorumQuorumQuorumQuorumAutobiographerQuorumQuorumQuorumQuorumQuo 
rumQuorumQuorumQuorumQuorumQuorumQuorumQuorumQuorumQuorumQuorumQuorumQuorumQuoru 

당신은 약간의 곁눈질을해야합니다. 작은 크기는 다음과 같습니다

여기

textvatar(tm)

내가 그것을 만든 방법이다.

1 단계 : 적절한 이미지를 찾습니다.

2 단계 : 회색 음영으로 변환;

3 단계 : 회색을 극단으로 변환합니다. 이 단계는 입력 범위 (회색 값)가 0에서 255까지의 전체 범위를 사용하는지 확인하는 것입니다.

4 단계 : 이미지의 크기를 가장 잘 맞게 조정합니다. 나는 80x40을 고르고 의도적으로 이미지를 반으로 쪼개었다. 왜냐하면 '텍스트'는 일반적으로 너비보다 큽니다. 다른 글꼴은 다른 종횡비가 필요합니다! 80은 줄당 문자 수이고, 40은 총 줄 수입니다.

저는 위의 단계에서 Photoshop을 사용했습니다. 단지 코드을 쓰고 싶지 않았기 때문입니다. 원시 이미지 데이터에 액세스 할 수있는 한 어렵지도 않습니다. 그러나 많은 작업과 흥미롭지 않습니다. 당신은 픽셀을 볼 수 있도록 400 %로 확대

중간 단계 :

deformed grayscale image

5 단계 : 자신 고정 폭 비트 맵 글꼴을 찾을 수 있습니다. 나는 '웹상에서 좋은 8x8을 발견했다. 아마도 더 큰 크기 일 수 있습니다. 그러나 제한 요소가 문자열이 아니기 때문에 매우 작습니다.

6 단계 : 각 ASCII 문자의 '회색'값을 계산합니다. 이것은 검정 픽셀 수를 총 픽셀 수로 나눈 값입니다. 더 나은 스프레드를 위해 각 문자의 결과를 최대 값으로 나누었으므로 가장 낮은 값은 0 (공백으로)이고 가장 높은 값은 1 (이 값은 M이지만 글꼴에 따라 다릅니다)입니다. 그런 다음 값에 255를 곱하여 회색 음영 값을 모방했습니다. 마지막으로이 값은 그레이 스케일 이미지의 값과 반대이므로 255-value으로 바꿨습니다.

사이에 나는 초기 아이디어가 여전히 확실한지 확인하기 위해 많은 테스트를 수행했습니다.

0MMMMMM00000000000RDRRDDDDDDDDDDDDDDR#@RRRRR#[email protected]@[email protected]&44&#00#0000 
MMMMMM000000000000RDRDDDDDDDDDDDDDDDR0####0R&&&&&&[email protected]@#########[email protected] 
MMM000#00000000000RDRRDDDDDDDDDDD&&&R00#[email protected]&[email protected]####[email protected]#0000000##0#RD4PP&[email protected] 
M000#0000000000000RDDDDDDDDDDD&D&&D&R###[email protected]#0000#@@##@@@@@##000000R&2FPP4R#000 
00###0000000000000RDDDDDDDDDDDDDD&&&D0000#@##@##00##@RDD&DRRRR#[email protected]@00 
00#000000000000000RDDDDDDDDDD&D&D&&&[email protected]@@##00#R&4&44DDDRRR#0000##R&[email protected] 
00##00#00000000000RDDDDDDDDDDD&&&&&&RDRRRRRRRR##@@RR&F4&[email protected]@#0000000#&44&&4FD 
000000000000000000DDDDDDD&&&DD&&&D&&R##@RRRRRRRRRRRRD&DRD&44DD&[email protected]#00000RDDRR4F4 
000000000000000000RDDDDDDDRRDRDDD&[email protected]###@R&4&4444PP4DRRR&P22FF2FP&[email protected] 
[email protected]@@R&&[email protected]&P2$33*33*4RRRDP23$*33$$**333*$$2D#@4DR 
[email protected]#DDRRRRRD&D4*$$%%ff3F&DRRR2$1%$$%11ff%ll1l;'IRDF&R 
[email protected]#0#00000R4444DRRRR&3llf33$32PDRR&3Ii(i%fIlI1Il!ii/' .FF4DR 
0000000#0000000000#@@#0MM0M00#RP22*24DR4$l!!!I%*P4DDP31i===/lf1Illi((ii=;..*F4RR 
000000000000000000#@@##[email protected]*$%*2PFflilllI1f3*2PF3fIi/=(lf$fIi/======;iF&P4R 
000000000000000000##@##00000000&3f$2F2*1i!ll1$2P4RD&4P*$$%!ii!I!ii/=/=;;;(*&R4FR 
000000000000000000#####00000000D%I3$$fflil!l1$3%3&RD2PP*$%1ll!lI1%f$3fI="1RRRRDR 
000000000000000000#####00000000Rf1f%II1IIl!l!!1%ff$*FFFF*%((lf**F4&D&PPFf2RRRRRR 
00000000000000000M#####0000000003!i11II11l!!!(ilIIl1f$f%I="=1FP4&@#R&DP22&[email protected]#@ 
0000000000000000000###0000000000#$i/iIIIl!!i=;"";===;""""";i12FFP4&4*4&*[email protected]@R 
000000000000000000M000000000000000R4FF1l!i(=;"''"""""'...';/i$3$f$$33$$$4DRRRRRR 
[email protected](/ii/=;;=ilI;"'...'=;I%[email protected]@[email protected]#0 
000000000000000000000000000M00000000&11!=/li(i!I%%Ii;... .";"!I!!I1ff$*R0#@#0000 
000000000000000000000000M0000M000000$lli=//=/i!lIi/l%I/""=//'=Iiiil%[email protected]#@00000 
000000000000000000000000M0M0M00000MRl!!!/=;;/l%fl!lI%3233$ff%11II%%f*[email protected]##00000 
00000000000000000M000000M0MM00000003=illl!!iI%11%%f%f$32FF22$1%ff$f2DD4PR0000000 
00000000000000000M00M0#RRRRRRRRRRRPi/(lllI1I(=;=iI$2222FPFFP*$fff%FRR2322&R00000 
00000000000000000MM00#RRD&&&&&444*l/(i!ll!i!==/(il%$33*2FFF23$ff*4DDDF33*22&0000 
[email protected]@@@@@#&f!((/i!!!lI!i=;;/!l1f32*3$$$ff$2&[email protected]###@##00##000 
0000000000000000#[email protected]@4F4R0R3!////(iii!!l%Ii=;"=l%f$333$ff%$4############00000# 
0000000000000000000000#@@@#0Di/ii(=/(i!!!lI%%1!(iI%$**[email protected] 
00000000000000000000000000000R3l((/((ii!lll!I%$3$f$$$$$3$f20M0000000000000000000 
000000000000000000000000000000#2l///((!!l!!i!!1%f%f$3$f%%fR000000000000000000000 
00000000000000#00000000000000000&l//(i!llllII1%%%1I1ff1I1&000000000000000000#00# 
M00000000000000000000000000000000R3l!!llII111%%%%%%f$$f%2000000000000000000RR00# 
0000#000000000000000000000000000000R*%1II111%%ffff$33fffR000000000000000000##00# 
0####000000000000000000000000000000M0RF3ff$$$fff$$33$ff&00000000000#000000##000R 
#00000000#00000000000000000000000000000R4FFFF22*****[email protected]& 
00###[email protected]&&&4P*34#00000000000000000000000#R 
00000####000000000000000000000000000000000000##@RRDDR00000000000000M0000000000## 
00000000#000000000000000000000000000000000000000000000000000000000000000000000## 

이 평균 이미지가 예술 컨버터 출력을 ASCII하는 것과 유사하다 : 여기에 일반 회색 - 투 - 문자 변환을 사용하여 내 테스트 이미지의 덤프입니다.

7 단계 : 사용할 문자열 목록을 찾으십시오.

8 단계 : 왼쪽 상단부터 시작하여 각 문자열의 이미지 범위를 테스트합니다. 가장 잘 맞는 것을 인쇄하고,이 문자열의 길이만큼 위치를 높이고, 완료 될 때까지 반복하십시오. 중복되지 않으려면이 시점에서 풀에서 문자열을 제거하십시오.

9 단계 : 이익! 커버리지 시험용


는 I 문자열의 길이에 의해 분할 된 각각의 문자/픽셀에 대해 (source - dest)²의 합을 사용했을 저급 = 더 - 캐릭터와 목적지 사이의 작은 차이.

나는 예쁜 라인 엔딩을 여기에서 고려하지 않았다. 나는 한 단어가 정확히 한 줄을 채우면 부정적인 보너스를주는 것으로 실험했지만 출력의 차이는 작았습니다. 더 큰 문자열 집합에서도 여전히 작동 할 수 있습니다.

문자열의 시퀀스을 테스트해볼 수있는 가능성이 있습니다. 즉, 단어 래핑 텍스트에서 최상의 중단을 결정하기 위해 고안 한 Donald Knuth와 매우 흡사 한 동적 프로그래밍 방식을 사용합니다.

+0

감사합니다. 불행히도 제가 작업 한 프로젝트는 폐기되었습니다.이 글은 훌륭한 읽을 거리 였고, 저는 이것을 메모리 뱅크에 저장하려고합니다. 아마이 코드를 어딘가에 시험해 볼 수 있기를 바랍니다. – Caranicas