Go에서 ANSI 이스케이프 시퀀스로 착색된 텍스트를 이미지에 일으키는 명령을 만들었다
머리
만든 경위
아티팩트
GitHub - jiro4989/textimg
사용법
표준 입력에서 ANSI 이스케이프 시퀀스와 함께 텍스트를 전달하면 이미지가 내뿜습니다.
단말기에 흘려도 어쩔 수 없기 때문에, 파일 출력이나, 파이프처가 존재하지 않을 때는 출력하지 않습니다.
$ seq 0 255 | while read -r i; do
echo -ne "\x1b[38;5;${i}m$(printf %03d $i)"
if [ $(((i+1) % 16)) -eq 0 ]; then
echo
fi
done | textimg -o 256_fg.png
애니메이션 GIF도 생성할 수 있습니다.
한 프레임에 몇 줄의 텍스트를 사용할 수도 있습니다.
$ echo -e '\x1b[31mText\x1b[0m
\x1b[32mText\x1b[0m
\x1b[33mText\x1b[0m
\x1b[34mText\x1b[0m
\x1b[35mText\x1b[0m
\x1b[36mText\x1b[0m
\x1b[37mText\x1b[0m
\x1b[41mText\x1b[0m
\x1b[42mText\x1b[0m
\x1b[43mText\x1b[0m
\x1b[44mText\x1b[0m
\x1b[45mText\x1b[0m
\x1b[46mText\x1b[0m
\x1b[47mText\x1b[0m' | textimg -a -o ansi_fb_anime_1line.gif
이모티콘도 그릴 수 있습니다만, 환경 구축이 조금 번거롭다. 자세한 것은 README 보시면.
$ echo Test👍 | textimg -o emoji.png
설치
이모티콘 등을 그릴 수 없어도 좋다면 아래만으로 충분합니다.
go get -u github.com/jiro4989/textimg
이모티콘을 그리려면 이모티콘 글꼴과 이모티콘 이미지를 준비해야 합니다.
준비하는 방법에 대해서는 README에 기재하고 있으므로 그쪽을 참조해 주시면.
그들 모두 포함한 Docker 이미지를 준비하고 있기 때문에 그것을 사용하는 것도 있습니다.
docker pull jiro4989/textimg
docker run -v $(pwd):/images -it jiro4989/textimg -h
docker run -v $(pwd):/images -it jiro4989/textimg Testあいうえお😄 -o /images/a.png
docker run -v $(pwd):/images -it jiro4989/textimg Testあいうえお😄 -s
구현
사용한 라이브러리
표준 입력에서 ANSI 이스케이프 시퀀스와 함께 텍스트를 전달하면 이미지가 내뿜습니다.
단말기에 흘려도 어쩔 수 없기 때문에, 파일 출력이나, 파이프처가 존재하지 않을 때는 출력하지 않습니다.
$ seq 0 255 | while read -r i; do
echo -ne "\x1b[38;5;${i}m$(printf %03d $i)"
if [ $(((i+1) % 16)) -eq 0 ]; then
echo
fi
done | textimg -o 256_fg.png
애니메이션 GIF도 생성할 수 있습니다.
한 프레임에 몇 줄의 텍스트를 사용할 수도 있습니다.
$ echo -e '\x1b[31mText\x1b[0m
\x1b[32mText\x1b[0m
\x1b[33mText\x1b[0m
\x1b[34mText\x1b[0m
\x1b[35mText\x1b[0m
\x1b[36mText\x1b[0m
\x1b[37mText\x1b[0m
\x1b[41mText\x1b[0m
\x1b[42mText\x1b[0m
\x1b[43mText\x1b[0m
\x1b[44mText\x1b[0m
\x1b[45mText\x1b[0m
\x1b[46mText\x1b[0m
\x1b[47mText\x1b[0m' | textimg -a -o ansi_fb_anime_1line.gif
이모티콘도 그릴 수 있습니다만, 환경 구축이 조금 번거롭다. 자세한 것은 README 보시면.
$ echo Test👍 | textimg -o emoji.png
설치
이모티콘 등을 그릴 수 없어도 좋다면 아래만으로 충분합니다.
go get -u github.com/jiro4989/textimg
이모티콘을 그리려면 이모티콘 글꼴과 이모티콘 이미지를 준비해야 합니다.
준비하는 방법에 대해서는 README에 기재하고 있으므로 그쪽을 참조해 주시면.
그들 모두 포함한 Docker 이미지를 준비하고 있기 때문에 그것을 사용하는 것도 있습니다.
docker pull jiro4989/textimg
docker run -v $(pwd):/images -it jiro4989/textimg -h
docker run -v $(pwd):/images -it jiro4989/textimg Testあいうえお😄 -o /images/a.png
docker run -v $(pwd):/images -it jiro4989/textimg Testあいうえお😄 -s
구현
사용한 라이브러리
go get -u github.com/jiro4989/textimg
docker pull jiro4989/textimg
docker run -v $(pwd):/images -it jiro4989/textimg -h
docker run -v $(pwd):/images -it jiro4989/textimg Testあいうえお😄 -o /images/a.png
docker run -v $(pwd):/images -it jiro4989/textimg Testあいうえお😄 -s
사용한 라이브러리
로직
ANSI 이스케이프 시퀀스가 포함된 텍스트를 다음과 같이 분해합니다.
퍼스는 자력으로 바삭바삭하고 있습니다. 더럽지만 방치하고 있습니다.
htps : // 기주 b. 이 m/지로 4989/에서 x치 mg/bぉb/마s r/에 sc 세 q/파 r 세. #L67
분해된 요소는 각각 텍스트 또는 ANSI 이스케이프 시퀀스입니다.
각각의 요소가 계속되는 한, 이하의 플로우로 처리합니다.
이미지 버퍼에 오로지 텍스트를 그리는 것입니다만, ANSI 이스케이프 시퀀스의 경우는 색의 변수의 갱신만으로 좌표를 갱신하지 않고,
텍스트를 할 때는 ANSI 이스케이프 시퀀스를 사용하여 이미지를 그리며 좌표를 업데이트하는 흐름을 계속 확장합니다.
htps : // 기주 b. 이 m/지로 4989/에서 x치 mg/bぉb/마s r/이오마게/눈썹. #L58
기능 추가하고 있는 안에 함수가 비대화해 더러워져 어떻게 된 것일까, 라고 생각하고 있지만, 원하는 기능을 구현해 버리는 일이 없기 때문에 방치하고 있습니다.
색상 매핑
어리석게 RGB 값과 매핑합니다.
htps : // 기주 b. 코 m/지로 4989/에서 x치 mg/bぉb/마s r/에 sc 세 q/코 r. #L79
요약
다음 내용에 대해 썼습니다.
처음에는 ANSI 이스케이프 시퀀스를 이미지에 재현할 뿐이었지만,
눈치채면 애니메이션 GIF를 생성할 수 있게 되어 있거나,
어느새 다양하게 할 수 있게 되었습니다.
Go에서 구현하는 재미 있습니다.
이상입니다.
Reference
이 문제에 관하여(Go에서 ANSI 이스케이프 시퀀스로 착색된 텍스트를 이미지에 일으키는 명령을 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jiro4989/items/323ec9be7023d40225bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)