Como transformar um arquivo de texto em uma imagem

Como transformar um arquivo de texto em uma imagem

Se eu tiver um arquivo de texto simples, como posso convertê-lo em um arquivo de imagem por meio da linha de comando? (e preserve o layout da arte ASCII nele)

Responder1

imagemagické seu amigo aqui. Algo semelhante ao seguinte pode ajudá-lo: -

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

onde ascii.txtestá seu arquivo 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:::::::::' 
        `':::_:' -- '' -'-' `':_::::'`  
    "

com text 15,15adicionado como a primeira linha do texto (15,15 é um deslocamento posicional). Além disso, certifique-se de que o texto real a ser convertido esteja entre aspas. Aspas simples ou duplas servem, mas certifique-se de que não sejam usadas como parte de sua arte ascii, pois isso confundirá as coisas.

A fonte escolhida deve ser monoespaçada, caso contrário o texto não será alinhado.

Isso produz: -

insira a descrição da imagem aqui

Responder2

Acho que -annotateo operador do ImageMagick é um pouco mais conveniente do que o -drawmétodo sugerido por garethTheRed, pela simples razão de que não requer modificação do arquivo de entrada. Não é tão poderoso quanto o -draw, mas para despejar em massa o conteúdo de um arquivo de texto em uma imagem, ele serve perfeitamente.

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

produzirá uma versão renderizada do conteúdo do arquivo fornecido, mas sem a necessidade de modificar seu arquivo "ascii.txt" para conter a text 15x15parte do -drawprimitivo.

Especificando Argumentos

O argumento para -fontpode ser qualquer nome de fonte compatível, se o FreeMono não estiver disponível (ou simplesmente não for desejado). Uma lista das fontes disponíveis para qualquer comando do ImageMagick pode ser obtida usando o -listoperador, portanto convert -list fontexibirá todos os argumentos possíveis para -font.

Os argumentos para -annotate(até que ponto o texto renderizado deve ser deslocado da borda da tela) consistem em deslocamentos de pixels horizontais e verticais (respectivamente). O primeiro deslocamento (deslocamento x horizontal) pode ser qualquer número inteiro positivo, mas não precisa ser maior que alguns pixels. O segundo deslocamento (deslocamento y vertical)deveserpelo menosigual ao tamanho da fonte escolhida (o argumento para -pointsize), porque o ImageMagick colocará olinha de baseda fonte no deslocamento fornecido. Portanto, se você não diminuir a fonte em pelo menos pointsizepixels, o topo da primeira linha será cortado.

Eu recomendo passar pelo menos vários pixels, então se você estiver usando -pointsize 64, você deve emparelhar isso com algo como -annotate +15+80. (Não há razão para aumentar o deslocamento horizontal com tamanhos de fonte maiores, pois não tem relação com as dimensões do texto.)

A necessidade de adivinhar as dimensões necessárias da imagem de saída também pode ser entediante. Normalmente, apenas escolho valores excessivos, aproveito o ImageMagick -trime -borderfaço o corte automático do resultado. O seguinte comando:

convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png

será renderizado em uma caixa de 1000x2000 e, em seguida, cortará o excesso de espaço em branco, exceto por uma borda de 10 pixels em todo o texto. No +repagefinal, evita que o PNG de saída seja criado com um deslocamento de imagem, o que faria com que o GIMP exibisse uma caixa de diálogo durante o carregamento perguntando se deveria aplicar o deslocamento.

(Obviamente, 1000x2000 é excessivo para arquivos de texto pequenos e, para arquivos mais longos, pelo menos a dimensão vertical pode precisar ser aumentada. É mais simples superestimar, pois o único custo é convertconsumir um pouco mais de CPU e memória durante o processamento.)

Entrada de pré-processamento

Se o seu arquivo de texto ainda não estiver formatado da maneira necessária para renderizá-lo (por exemplo, se ele usar linhas muito longas), talvez seja necessário reformatá-lo antes de entregá-lo convert. O ImageMagick não quebra o texto, então cada linha de texto se estende por todo o seu comprimento horizontalmente. Felizmente, é possível executar o arquivo por meio de qualquer formatador de linha de comando desejado e, em seguida, canalizar o texto processado convertem vez de ler diretamente do arquivo:

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

Isso renderizará o conteúdo ascii.txtem DejaVu Sans Condensed de 24 pontos,depoisele foi processado pelo fmtcomando, que em seu modo de operação padrão reformatará sua entrada quebrando palavras para uma largura de 75 colunas. (A menos que haja longas sequências contínuas com mais de 75 caracteres, como URLs, caso em que elas se estenderão.)

Depois fmtde reformatado o texto, ele será passado para converto qual renderizará a fmtsaída canalizada, como se estivesse lendo o arquivo diretamente. (Especificar um nome de arquivo -é uma abreviatura bastante comum do shell UNIX para "ler a partir da entrada padrão, em vez de qualquer arquivo de disco nomeado", e as ferramentas do ImageMagick seguem essa convenção.)

Responder3

Você poderia usar o openoffice (libreoffice) para fazer isso.

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

também funciona com arquivos de texto.

Responder4

Uma solução simples é usar o pango-viewfornecido peloPango, uma biblioteca de renderização de texto usada no GTK que você provavelmente já instalou:

pango-view --font=mono -qo image.png file

Você pode criarSVGstambém!

pango-view --font=mono -qo image.svg file

pango-viewtem muitas opções de customização e layout, consulte sua página de manual.

informação relacionada