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


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 ...? 혹시 그렇다면, 당신은 단지 대체 할 수에 의해, 명령 작업의 형태 fmt로 cat하고, 같은 결과를 얻을 @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.