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.txt
está 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,15
adicionado 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: -
Responder2
Acho que -annotate
o operador do ImageMagick é um pouco mais conveniente do que o -draw
mé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 15x15
parte do -draw
primitivo.
Especificando Argumentos
O argumento para -font
pode 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 -list
operador, portanto convert -list font
exibirá 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 pointsize
pixels, 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 -trim
e -border
faç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 +repage
final, 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 é convert
consumir 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 convert
em 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.txt
em DejaVu Sans Condensed de 24 pontos,depoisele foi processado pelo fmt
comando, 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 fmt
de reformatado o texto, ele será passado para convert
o qual renderizará a fmt
saí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-view
fornecido 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-view
tem muitas opções de customização e layout, consulte sua página de manual.