텍스트 파일을 그림으로 변환하는 방법


17

일반 텍스트 파일이있는 경우 명령 행을 통해 이미지 파일로 변환하려면 어떻게해야합니까? (그리고 ASCII 아트의 레이아웃을 보존하십시오)


나는 고정 폭 글꼴로 텍스트를 렌더링 할 수있는 자동 방법을 찾고 시작할 것 (김프 또는 라텍스 갈 수있는 방법이 될 수 있음)
RSFalcon7

이것은 못생긴 솔루션이지만 왜 cat스크린 샷을 찍지 않습니까?
psimon

화면이 너무 나쁘고 스크린 샷에는 프롬프트와 같은 추가 정보가 포함됩니다.
Quora Feans

프롬프트 만 문제가 있으면 다음을 시도하십시오 clear && cat file.. 그러나 그렇습니다.
psimon

그래도 여전히 내 사용자 이름이 표시되지 않습니다 ... 그리고 명령 줄을 통해 스크린 샷을 만드는 방법을 찾지 못하면 허용되지 않습니다.
Quora Feans

답변:


8

openoffice (libreoffice)를 사용하여 수행 할 수 있습니다.

soffice --convert-to jpg "Textfile.doc"

텍스트 파일에서도 작동합니다.


저건 ... 대단해! OpenOffice가 JPG ... 또는 PNG로 변환 할 수 있다는 것을 전혀 몰랐습니다. 아마 다른 형식도. ( --help출력 에 이것에 대한 언급이나 힌트가없는 것도 도움이되지 않습니다 .) 텍스트가 한 페이지보다 긴 경우에만 주름 만 첫 페이지를 얻는 것처럼 보입니다. (다른 페이지 또는 여러 파일을 출력하도록 지시하는 방법이 있다면 나에게 분명하지 않습니다. 전달 --outdir하면 차이가 없습니다.) 그러나 짧은 텍스트의 경우 매우 잘 작동하며 자동 줄 바꿈도 가능합니다. 좋은!
FeRD

이렇게하면 텍스트가 작은 경우 잠재적으로 작은 텍스트가있는 고정 크기의 페이지가 생성됩니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 고정 크기 페이지, true입니다. 그러나 ImageMagick의 자동 자르기가 다시 유용합니다.soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
FeRD

26

imagemagick당신의 친구입니다. 다음과 비슷한 것이 도움이 될 수 있습니다.

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png

ascii.txtascii-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 오프셋의 위치이다). 또한 변환 할 실제 텍스트는 따옴표로 묶어야합니다. 작은 따옴표 나 큰 따옴표는 사용하지만 문제를 혼동시킬 수 있으므로 아스키 아트의 일부로 사용하지 마십시오.

선택한 글꼴은 고정 폭 글꼴이어야합니다. 그렇지 않으면 텍스트가 정렬되지 않습니다.

이것은 다음을 생성합니다.

여기에 이미지 설명을 입력하십시오


유효한 글꼴 이름 목록을 얻는 방법에 대한 힌트가 있습니까? Free Mono가 시스템에 설치되어있는 것 같지만 imagemagick은이를 인식하지 못합니다.
Raphael

1
@Raphael : -list옵션을 사용하여 ImageMagick 명령 (변환 포함)에서 현재 사용 가능한 글꼴 목록을 얻을 수 있습니다 . 예를 들어 convert -list font에 가능한 모든 인수를 보여줍니다 -font.
FeRD

을 사용하여이 프로그램을 설치할 수도 있습니다 sudo yum install ImageMagick.
rangsiman

@ R.Ketkaew이 명령은 Fedora 21 이하를 실행하거나 RHEL의 일부 개정판에 유효합니다 (최신 버전이 여전히 yum을 사용하고 있는지 확실하지 않음). Fedora 22+에서 install 명령은 sudo dnf install ImageMagick입니다. 대부분의 다른 Linux 배포판에서는 약간의 sudo apt-get install ...명령입니다. 어쨌든 위의 정보는 실제로 해당 시스템에 ImageMagick이 설치되어 있다고 가정합니다.
FeRD

18

ImageMagick의 -annotate연산자가 -drawgarethTheRed가 제안한 방법 보다 조금 더 편리 하다는 것을 알았습니다. 단순한 이유로 입력 파일을 수정할 필요가 없습니다. 만큼 강력 -draw하지는 않지만 텍스트 파일의 내용을 이미지에 대량으로 덤프하는 경우에는 잘 작동합니다.

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png

주어진 파일 내용의 렌더링 된 버전을 출력하지만 text 15x15, -draw프리미티브 의 일부 를 포함하도록 "ascii.txt"파일을 수정하지 않아도됩니다 .

인수 지정

인수하는 -fontFreeMono 사용할 수없는 (또는 단순히 바람직하지 않은) 경우, 지원되는 모든 글꼴 이름이 될 수 있습니다. 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는 달리 GIMP는 오프셋 적용할지 여부를 묻는 부하에 대화 상자를 팝업하는 것입니다 원인의 오프셋 (offset) 이미지로 생성된다.

(작은 텍스트 파일의 경우 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 의 내용이 렌더링 됩니다. 기본 작동 모드에서는 워드 랩핑하여 입력을 75 열 너비로 다시 포맷합니다. (URL과 같이 길이가 75자를 초과하는 긴 연속 문자열이 없으면 확장됩니다.)fmt

일단 fmt텍스트를 포맷했다, 전달됩니다 convert다음 파이프 렌더링되는 fmt이 직접 파일을 읽는 것처럼 동일한 출력을. (파일 이름 지정은 -"명명 된 디스크 파일 대신 표준 입력에서 읽음"이라는 상당히 일반적인 UNIX 셸 축약이며 ImageMagick의 도구는이 규칙을 따릅니다.)


1
annotate인수 의 y 성분은 pointsize보다 커야 모든 것이 표시됩니다. 원하는 크기는 convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png어디에 있습니까 123? 또한 convert -list font지원되는 글꼴을 찾을 수 있습니다 ( "FreeMono"일반적으로 지원되지 않음).
Alec Jacobson

1
수정 : convert -list font이 아닌 올바른 구문 convert -list fonts입니다.
Sopalajo de Arrierez 15:56에

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 흠, 좋은 질문입니다. 내 IM7 설치에는 /etc/ImageMagick-7/policy.txt이러한 변환 형식을 방해 하는 정책이 설정되어 있지 않습니다 . 어떤 정책이 전환을 차단하고 있으며 왜 설정되어 있는지 알고 있습니까? (또한, 빨대에서 파악 : 파이프로 연결된합니까 fmt ...? 혹시 그렇다면, 당신은 단지 대체 할 수에 의해, 명령 작업의 형태 fmtcat하고, 같은 결과를 얻을 @ascii.txt버전.)
FeRD

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 아, 한가지 더 질문입니다 : "추악한 메타 데이터없이 턱시도에 실패했습니다." 즉, 그 의미 하는가 convert 성공 하면 garethTheRed의 @ 사용하는 경우 -draw에 위치 명령을 형태로 삽입 ascii.txt파일? 가져온 텍스트 파일의 내용을 처리 할 때 적용되지 않을 보안 문제가 무엇인지 상상하는 데 어려움을 겪고 있기 때문에 꽤 기괴한 것 같습니다 . -annotate-draw
FeRD

1
추악한 메타 데이터로 인해 Gareth의 답변을 시도조차하지 않았지만 지금은 효과가있었습니다. 내 /etc/ImageMagick-6/policy.xml포함 <policy domain="path" rights="none" pattern="@*"/>그래서 내가 그 하나를 추측 해요. stdin도 @-패턴 이 있기 때문에 작동하지 않습니다 . 절망적 인 "$(cat ascii.txt)"경우 CLI 길이를 늘리지 않으면 작동합니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.