Se eu tiver um arquivo de texto sem formatação, como posso convertê-lo em um arquivo de imagem através da linha de comando? (e preservar o layout da arte ASCII)
command-line
Quora Feans
fonte
fonte
cat
isso e tirar uma captura de tela?clear && cat file
. Mas sim, é feio.Respostas:
Você pode usar o openoffice (libreoffice) para fazer isso.
Também funciona com arquivos de texto.
fonte
--help
saída.) Apenas amassar, se o texto for maior que uma página, parece que você só obtém a primeira página. (Se existe uma maneira de dizer a ele para imprimir outras páginas ou vários arquivos, isso não é imediatamente óbvio para mim. Passar--outdir
não faz diferença.) Mas, para pequenos pedaços de texto, ele funciona EXTREMAMENTE bem, e até quebra automática. Agradável!soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
imagemagick
é seu amigo aqui. Algo semelhante ao seguinte pode ajudá-lo: -Onde
ascii.txt
está o seu arquivo ascii-art: -com
text 15,15
adicionado como a primeira linha de texto (a 15,15 é um deslocamento posicional). Além disso, verifique se o texto real a ser convertido está entre aspas. Aspas simples ou duplas servirão, mas certifique-se de que não sejam usadas como parte de sua arte asciática, pois isso confundirá as coisas.A fonte que você escolher deve ser uma fonte com espaçamento simples, caso contrário, o texto não será alinhado.
Isso produz: -
fonte
-list
opção Então, por exemploconvert -list font
, mostraria todos os argumentos possíveis para-font
.sudo yum install ImageMagick
.sudo dnf install ImageMagick
e, na maioria das outras distribuições populares do Linux, haverá algumsudo apt-get install ...
comando. Independentemente disso, as informações acima assumem que o ImageMagick está instalado no sistema em questão.Acho que o
-annotate
operador do ImageMagick é um pouco mais conveniente do que o-draw
método sugerido por TheRed, pela simples razão de que ele não requer modificação no arquivo de entrada. Não é tão poderoso quanto-draw
, mas para o descarte por atacado do conteúdo de um arquivo de texto em uma imagem, ele serve muito bem.produzirá uma versão renderizada do conteúdo do arquivo, mas sem precisar modificar o arquivo "ascii.txt" para conter a
text 15x15
parte da-draw
primitiva.Especificando argumentos
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 ImageMagick pode ser obtida usando o-list
operador, paraconvert -list font
exibir todos os argumentos possíveis para-font
.Os argumentos para
-annotate
(até que ponto deslocar 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 (deslocamento vertical em y) deve ser pelo menos igual ao tamanho do ponto da fonte escolhida (o argumento para-pointsize
), porque o ImageMagick colocará a linha de base da fonte no deslocamento especificado. Portanto, se você não mudar a fonte para pelo menospointsize
pixels, a parte superior da primeira linha será cortada.Eu recomendo passar por vários pixels, pelo menos, então se você estiver usando
-pointsize 64
, você deve emparelhá-lo com algo parecido-annotate +15+80
. (Não há motivo para aumentar o deslocamento horizontal com tamanhos de fonte maiores, ele 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. Normalmente, apenas escolho valores excessivos, depois aproveito o ImageMagick
-trim
e-border
corro o resultado automaticamente. O seguinte comando:será renderizado em uma caixa de 1000 x 2000 e, em seguida, apara o excesso de espaço em branco, exceto por uma borda de 10 pixels ao redor do texto. No
+repage
final, impede 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 ao carregar 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. Porém, é mais fácil 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 que você precisa para renderizá-lo (por exemplo, se ele usa linhas muito longas), talvez seja necessário reformatá-lo antes de entregá-lo
convert
. O ImageMagick não quebra o texto; portanto, cada linha de texto aumentará seu comprimento horizontalmente. Felizmente, é possível executar o arquivo através dos formatadores de linha de comando que você desejar e canalizar o texto processado emconvert
vez de ler diretamente do arquivo:Isso renderizará o conteúdo do
ascii.txt
DejaVu Sans Condensed de 24 pontos, depois de processado pelofmt
comando, 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 haja longas sequências contínuas com mais de 75 caracteres, como URLs, nesse caso, elas serão estendidas.)Depois de
fmt
reformatar o texto, ele será passado para oconvert
qual renderizará afmt
saída canalizada , como se estivesse lendo o arquivo diretamente. (Especificar um nome de arquivo de-
é uma abreviação do shell UNIX bastante comum para "ler da entrada padrão, em vez de qualquer arquivo de disco nomeado", e as ferramentas do ImageMagick seguem essa convenção.)fonte
annotate
argumento deve ser maior que o tamanho do ponto para garantir que tudo apareça:convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
onde123
está o tamanho desejado. Além disso, você pode usarconvert -list font
para descobrir quais fontes são suportadas ("FreeMono"
não é universalmente suportada).convert -list font
é a sintaxe correta, nãoconvert -list fonts
./etc/ImageMagick-7/policy.txt
que interfira em qualquer um desses formulários de conversão. Você sabe qual política está bloqueando a conversão e por que está definida? (Além disso, agarrando em palhas: Será que o canalizadafmt ...
forma da obra de comando, por acaso Se assim for, você poderia simplesmente substituir?fmt
Comcat
, e obter o mesmo resultado que a@ascii.txt
versão.)convert
é bem-sucedido quando você usa o-draw
formulário de @ garethTheRed e insere os comandos de posicionamento noascii.txt
arquivo? Seria muito bizarro, se for esse o caso, parece-me, já que estou tendo problemas para imaginar quais preocupações de segurança haveria com as-annotate
quais também não se aplicariam ao-draw
trabalhar com o conteúdo de um arquivo de texto importado./etc/ImageMagick-6/policy.xml
contém,<policy domain="path" rights="none" pattern="@*"/>
então acho que é esse. stdin também não funciona, provavelmente porque também possui o@-
padrão. Para os desesperados,"$(cat ascii.txt)"
funciona se não aumentar o comprimento da CLI.