Você poderia usar o openoffice (libreoffice) para fazer isso.
soffice --convert-to jpg "Textfile.doc"
também funciona com arquivos de texto.
Se eu tiver um arquivo de texto simples, como posso convertê-lo em um arquivo de imagem por meio da linha de comando? (e preservar o layout da arte ASCII nele)
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
é o 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 primeira linha de texto (o 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 servirão, mas certifique-se de que elas não sejam usadas como parte de sua arte, pois isso confundirá as coisas.
A fonte escolhida deve ser uma fonte monoespaçada, caso contrário, o texto não será alinhado.
Isso produz: -
Acho que o operador -annotate
do ImageMagick é um pouco mais conveniente do que o método -draw
garethTheRed sugeriu, pela simples razão de que não requer modificação do arquivo de entrada. Não é tão poderoso quanto -draw
, mas para o despejo por atacado do conteúdo de um arquivo de texto em uma imagem, ele serve muito bem.
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, mas sem ter que modificar o arquivo "ascii.txt" para conter a parte text 15x15
da% primitiva-draw
.
O argumento para -font
pode ser qualquer nome de fonte suportado, 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 operador -list
, portanto, convert -list fonts
exibirá todos os possíveis argumentos para -font
.
Os argumentos para -annotate
(até onde mudar o texto renderizado da borda da tela) consistem em deslocamentos de pixel horizontal e vertical (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 (y-shift vertical) deve ser pelo menos igual ao tamanho em pontos da fonte escolhida (o argumento para -pointsize
), porque o ImageMagick colocará o linha de base da fonte no deslocamento especificado. Então, se você não deslocar a fonte pelo menos pointsize
pixels, o topo da primeira linha será cortado.
Recomendo pelo menos vários pixels, por isso, se você estiver usando -pointsize 64
, deverá emparelhar com algo como -annotate +15+80
. (Não há razão para aumentar o deslocamento horizontal com tamanhos de fonte maiores, não tem relação com as dimensões do texto.)
Precisando adivinhar as dimensões necessárias da imagem de saída também pode ser entediante. Eu costumo escolher valores excessivos, então aproveite -trim
e -border
do ImageMagick para autocrop o 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 1000 x 2000 e, em seguida, reduzirá o excesso de espaço em branco, com exceção de uma borda de 10 pixels em todo o texto. O +repage
no final impede que o PNG de saída seja criado com um deslocamento de imagem, o que, de outra forma, faria com que o GIMP exibisse um diálogo no carregamento perguntando se ele deveria aplicar o deslocamento.
(Obviamente, 1000x2000 é excessivo para pequenos arquivos de texto, e para os mais longos pelo menos a dimensão vertical pode precisar ser aumentada. É mais simples superestimar, pois o único custo é convert
consumindo um pouco mais de CPU e memória durante o processamento.)
Se o seu arquivo de texto ainda não estiver formatado da maneira que você precisa para renderizá-lo (digamos, se ele usar linhas muito longas), talvez seja necessário reformatá-lo antes de entregá-lo a convert
. O ImageMagick não encapsula o texto, de modo que cada linha de texto será ampliada horizontalmente. Felizmente, é possível executar o arquivo por meio de qualquer formatador de linha de comando desejado e, em seguida, enviar o texto processado para 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 renderiza o conteúdo de ascii.txt
em DejaVu Sans Condensed de 24 pontos, após ele foi processado pelo comando fmt
, que em seu modo padrão de operação reformatará sua entrada por quebra de linha para uma largura de 75 colunas. (A menos que existam sequências longas e contínuas com mais de 75 caracteres, como URLs, caso em que elas se estenderão.)
Quando fmt
tiver reformatado o texto, ele será passado para convert
, que renderizará a saída defmt
canalizada, como se estivesse lendo o arquivo diretamente. (Especificar um nome de arquivo de -
é uma abreviação de shell UNIX bastante comum para "leitura da entrada padrão, em vez de qualquer arquivo de disco nomeado", e as ferramentas do ImageMagick seguem essa convenção.)
Tags command-line