일반 텍스트 파일이 있는 경우 명령줄을 통해 어떻게 이미지 파일로 변환합니까? (그리고 ASCII 아트의 레이아웃을 유지합니다)
답변1
imagemagick
당신의 친구인가요? 다음과 유사한 내용이 도움이 될 수 있습니다.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png
ascii.txt
ASCII-art 파일은 어디에 있습니까?
text 15,15 " .88888888:.
88888888.88888.
.8888888888888888.
888888888888888888
88' _`88'_ `88888
88 88 88 88 88888
88_88_::_88_:88888
88:::,::,:::::8888
88`:::::::::'`8888
.88 `::::' 8:88.
8888 `8:888.
.8888' `888888.
.8888:.. .::. ...:'8888888:.
.8888.' :' `'::`88:88888
.8888 ' `.888:8888.
888:8 . 888:88888
.888:88 .: 888:88888:
8888888. :: 88:888888
`.::.888. :: .88888888
.::::::.888. :: :::`8888'.:.
::::::::::.888 ' .::::::::::::
::::::::::::.8 ' .:8::::::::::::.
.::::::::::::::. .:888:::::::::::::
:::::::::::::::88:.__..:88888:::::::::::'
`'.:::::::::::88888888888.88:::::::::'
`':::_:' -- '' -'-' `':_::::'`
"
텍스트의 첫 번째 줄로 추가됩니다 text 15,15
(15,15는 위치 오프셋입니다). 또한 변환하려는 실제 텍스트가 따옴표로 묶여 있는지 확인하십시오. 작은따옴표나 큰따옴표는 괜찮지만 혼란을 야기할 수 있으므로 ASCII 아트의 일부로 사용하지 않도록 하세요.
선택한 글꼴은 고정폭 글꼴이어야 합니다. 그렇지 않으면 텍스트가 정렬되지 않습니다.
이는 다음을 생성합니다.
답변2
입력 파일을 수정할 필요가 없다는 단순한 이유 때문에 ImageMagick의 -annotate
연산자가 garethTheRed가 제안한 방법보다 더 편리하다고 생각합니다 . -draw
강력하지는 않지만 -draw
텍스트 파일의 내용을 이미지로 일괄 덤프하는 데는 괜찮습니다.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
주어진 파일 내용의 렌더링된 버전을 출력하지만 기본 요소 text 15x15
의 일부를 포함하도록 "ascii.txt" 파일을 수정하지 않습니다 -draw
.
매개변수 지정
-font
FreeMono를 사용할 수 없거나 전혀 필요하지 않은 경우 매개변수는 지원되는 글꼴 이름이 될 수 있습니다. 연산자를 사용하여 ImageMagick 명령에 사용할 수 있는 글꼴 목록을 얻을 수 있으므로 -list
가능한 convert -list font
모든 인수가 표시됩니다 -font
.
-annotate
(렌더링된 텍스트가 캔버스 가장자리에서 이동하는 거리) 매개변수는 각각 가로 및 세로 픽셀 오프셋으로 구성됩니다. 첫 번째 오프셋(가로 x 오프셋)은 양의 정수일 수 있지만 몇 픽셀보다 클 필요는 없습니다. 두 번째 오프셋(세로 Y 오프셋)~ 해야 하다예적어도-pointsize
ImageMagick이 글꼴을 배치하므로 선택한 글꼴(의 매개변수)의 포인트 크기와 같습니다 .기준선지정된 오프셋의 글꼴입니다. 따라서 글꼴을 최소 픽셀만큼 아래로 이동하지 않으면 pointsize
첫 번째 줄의 상단이 잘립니다.
최소한 몇 픽셀씩 늘리는 것이 좋습니다. 따라서 이를 사용하고 있다면 -pointsize 64
. -annotate +15+80
(더 큰 글꼴 크기로 가로 오프셋을 늘릴 이유가 없습니다. 텍스트 크기.)
출력 이미지의 필요한 크기를 추측해야 하는 것도 지루할 수 있습니다. 저는 보통 너무 많은 값을 선택한 다음 ImageMagick을 활용하여 -trim
결과 -border
를 자동으로 자릅니다. 다음 명령:
convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
1000x2000 상자로 렌더링한 다음 10픽셀 테두리를 제외하고 텍스트 주변의 불필요한 공백을 잘라냅니다. 마지막으로 +repage
출력 PNG를 생성하기 위해 이미지 오프셋을 사용하는 것을 방지합니다. 그러면 김프가 로드 시 오프셋을 적용해야 하는지 묻는 대화 상자가 표시됩니다.
convert
(분명히 1000x2000은 작은 텍스트 파일의 경우 너무 크고 긴 텍스트 파일의 경우 최소한 세로 크기를 늘려야 할 수도 있습니다. 하지만 유일한 비용은 처리할 때 약간 더 많은 CPU와 메모리를 소비 하기 때문에 과대평가하기 쉽습니다. )
입력 전처리
텍스트 파일이 렌더링에 필요한 방식으로 아직 형식화되지 않은 경우(예: 매우 긴 줄을 사용하는 경우) ImageMagick에 전달하기 전에 이 작업을 수행해야 할 수 있습니다 convert
. 텍스트가 전체 길이로 확장됩니다. 다행히 원하는 명령줄 포맷터를 통해 파일을 실행한 다음 convert
파일에서 직접 읽는 대신 처리된 텍스트를 파이프로 연결할 수 있습니다.
fmt < ascii.txt | convert -size 1000x2000 xc:white -font "DejaVu-Sans-Condensed" \
-pointsize 24 -fill black -annotate +15+30 "@-" -trim -bordercolor "#FFF" \
-border 10 +repage image.png
ascii.txt
그러면 24포인트 DejaVu Sans 압축 콘텐츠가 렌더링됩니다.뒤쪽에fmt
이는 기본 작동 모드에서 자동 단어 줄 바꿈을 사용하여 입력 형식을 75열 너비로 다시 지정하는 명령에 의해 처리 되었습니다 . (단, URL과 같이 75자를 초과하는 긴 연속 문자열이 있는 경우에는 확장됩니다.)
텍스트 형식이 다시 지정 되면 파일에서 직접 읽은 것처럼 렌더링 파이프라인 출력 fmt
으로 전달됩니다 . (파일 이름을 지정하는 것은 "이름이 지정된 디스크 파일이 아닌 표준 입력에서 읽는 것"에 대한 매우 일반적인 UNIX 쉘 약어이며 ImageMagick의 도구는 이 규칙을 따릅니다.)convert
fmt
-
답변3
이를 위해 오픈오피스(libreoffice)를 사용할 수 있습니다.
soffice --convert-to jpg "Textfile.doc"
텍스트 파일에서도 작동합니다.