일반 텍스트 파일이 있는 경우 명령줄을 통해 어떻게 이미지 파일로 변환할 수 있나요? (그리고 그 안에 ASCII 아트의 레이아웃을 보존합니다)
답변1
imagemagick
당신 친구가 여기 있어요. 다음과 유사한 내용이 도움이 될 수 있습니다.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png
ASCII-art 파일은 어디에 ascii.txt
있습니까?
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
-annotate
ImageMagick의 연산자는 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-shift)~ 해야 하다BE적어도ImageMagick이 선택한 글꼴의 포인트 크기(에 대한 인수 -pointsize
)와 같습니다.기준선주어진 오프셋의 글꼴. 따라서 글꼴을 최소 픽셀 아래로 이동하지 않으면 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가 생성되는 것을 방지합니다. 그렇지 않으면 김프가 로드 시 오프셋을 적용할지 묻는 대화 상자를 표시하게 됩니다.
(분명히 작은 텍스트 파일의 경우 1000x2000이 과도하고 긴 텍스트 파일의 경우 최소한 세로 크기를 늘려야 할 수 있습니다. 하지만 유일한 비용은 convert
처리하는 동안 약간 더 많은 CPU와 메모리를 소비하므로 과대평가하는 것이 더 간단합니다.)
입력 전처리
텍스트 파일이 렌더링에 필요한 방식으로 아직 형식화되지 않은 경우(예를 들어 매우 긴 줄을 사용하는 경우) 에 전달하기 전에 형식을 다시 지정해야 할 수도 있습니다 convert
. ImageMagick은 텍스트를 줄 바꿈하지 않으므로 각 텍스트 줄은 전체 길이를 가로로 확장합니다. 다행히 원하는 명령줄 포맷터를 통해 파일을 실행한 다음 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 Condensed 의 내용이 렌더링됩니다 .~ 후에이는 명령에 의해 처리되었으며 fmt
, 기본 작동 모드에서는 단어 줄 바꿈을 통해 입력 형식을 75열 너비로 다시 지정합니다. (URL과 같이 75자를 초과하는 긴 연속 문자열이 있는 경우에는 확장됩니다.)
fmt
텍스트 형식을 다시 지정하면 전달되어 파일을 직접 읽는 것과 마찬가지로 convert
파이프된 출력을 렌더링합니다 . fmt
(파일 이름을 지정하는 것은 "이름 -
이 지정된 디스크 파일 대신 표준 입력에서 읽기"에 대한 매우 일반적인 UNIX 쉘 약어이며 ImageMagick의 도구는 해당 규칙을 따릅니다.)
답변3
오픈오피스(libreoffice)를 사용하면 됩니다.
soffice --convert-to jpg "Textfile.doc"
텍스트 파일에서도 작동합니다.