Si tengo un archivo de texto sin formato, ¿cómo puedo convertirlo en un archivo de imagen a través de la línea de comando? (y preservar el diseño del arte ASCII en él)
command-line
Quora Feans
fuente
fuente
cat
y tomar una captura de pantalla?clear && cat file
. Pero sí, es feo.Respuestas:
Puede usar openoffice (libreoffice) para hacerlo.
Funciona también con archivos de texto.
fuente
--help
salida). Solo arrugas, si el texto es más largo que una página, parece que solo obtienes la primera página. (Si hay una manera de decirle que envíe otras páginas o múltiples archivos, no es obvio para mí de inmediato. Pasar--outdir
no hace ninguna diferencia). Pero para fragmentos cortos de texto, funciona EXTREMADAMENTE bien, e incluso se ajusta automáticamente. ¡Agradable!soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
imagemagick
es tu amigo aquí Algo similar a lo siguiente puede ayudarlo: -¿Dónde
ascii.txt
está tu archivo ascii-art?con
text 15,15
agregado como la primera línea de texto (el 15,15 es un desplazamiento posicional). Además, asegúrese de que el texto real a convertir esté entre comillas. Las comillas simples o dobles servirán, pero asegúrese de que no se usen como parte de su arte ascii, ya que confundirá las cosas.La fuente que elija debe ser monoespaciada; de lo contrario, el texto no se alineará.
Esto produce: -
fuente
-list
opción. Entonces, por ejemplo,convert -list font
le mostraría todos los argumentos posibles para-font
.sudo yum install ImageMagick
.sudo dnf install ImageMagick
, y en la mayoría de las otras distribuciones populares de Linux será algúnsudo apt-get install ...
comando. En cualquier caso, la información anterior supone que ImageMagick está instalado en el sistema en cuestión.Considero que el
-annotate
operador de ImageMagick es un poco más conveniente que el-draw
método garethTheRed sugerido, por la sencilla razón de que no requiere modificación del archivo de entrada. No es tan poderoso como-draw
, pero para el volcado total de los contenidos de un archivo de texto en una imagen, sirve muy bien.generará una versión renderizada del contenido del archivo dado, pero sin tener que modificar su archivo "ascii.txt" para contener la
text 15x15
parte de-draw
primitiva.Especificación de argumentos
El argumento
-font
puede ser cualquier nombre de fuente compatible, si FreeMono no está disponible (o simplemente no se desea). Se puede obtener una lista de las fuentes disponibles para cualquier comando de ImageMagick utilizando el-list
operador, porconvert -list font
lo que mostrará todos los argumentos posibles para-font
.Los argumentos para
-annotate
(hasta qué punto desplazar el texto representado desde el borde del lienzo) consisten en desplazamientos de píxeles horizontales y verticales (respectivamente). El primer desplazamiento (desplazamiento horizontal x) puede ser cualquier número entero positivo, pero no necesita ser mayor que unos pocos píxeles. El segundo desplazamiento (desplazamiento vertical y) debe ser al menos igual al tamaño de punto de la fuente elegida (el argumento para-pointsize
), porque ImageMagick colocará la línea de base de la fuente en el desplazamiento dado. Entonces, si no desplaza la fuente hacia abajo al menospointsize
píxeles, la parte superior de la primera línea se cortará.Recomiendo ir al menos varios píxeles, por lo que si está utilizando
-pointsize 64
, debe emparejar eso con algo así-annotate +15+80
. (No hay razón para aumentar el desplazamiento horizontal con tamaños de fuente más grandes, no tiene relación con las dimensiones del texto).La necesidad de adivinar las dimensiones necesarias de la imagen de salida también puede ser tediosa. Por lo general, solo elijo valores excesivos, luego aprovecho los de ImageMagick
-trim
y-border
para recortar automáticamente el resultado. El siguiente comando:se renderizará en un cuadro de 1000x2000, luego recortará el exceso de espacio en blanco a excepción de un borde de 10 píxeles alrededor del texto. Al
+repage
final evita que el PNG de salida se cree con un desplazamiento de imagen, lo que de otro modo haría que GIMP muestre un cuadro de diálogo sobre la carga preguntando si debe aplicar el desplazamiento.(Obviamente, 1000x2000 es excesivo para archivos de texto pequeños, y para archivos más largos, al menos la dimensión vertical puede necesitar ser aumentada. Sin embargo, es más simple sobreestimar, ya que el único costo es
convert
consumir un poco más de CPU y memoria durante el procesamiento).Entrada de preprocesamiento
Si su archivo de texto no está formateado de la manera que necesita para renderizarlo (por ejemplo, si usa líneas muy largas), es posible que tenga que volver a formatearlo antes de entregárselo
convert
. ImageMagick no ajustará el texto, por lo que cada línea de texto se extenderá horizontalmente en toda su longitud. Afortunadamente, es posible ejecutar el archivo a través de cualquier formateador de línea de comandos que desee, luego canalizar el texto procesado enconvert
lugar de leerlo directamente desde el archivo:Eso representará el contenido de
ascii.txt
DejaVu Sans Condensed de 24 puntos, después de que haya sido procesado por elfmt
comando, que en su modo de operación predeterminado reformateará su entrada mediante el ajuste de palabras a un ancho de 75 columnas. (A menos que haya cadenas largas y continuas de más de 75 caracteres, como las URL, en cuyo caso se extenderán).Una vez que
fmt
ha reformateado el texto, seconvert
pasará a él y luego se generará lafmt
salida canalizada , como si estuviera leyendo el archivo directamente. (Especificar un nombre de archivo de-
es una abreviatura de shell de UNIX bastante común para "leer desde la entrada estándar, en lugar de cualquier archivo de disco con nombre", y las herramientas de ImageMagick siguen esa convención).fuente
annotate
argumento debe ser mayor que el tamaño del punto para asegurarse de que todo aparezca:convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
dónde123
está el tamaño deseado. Además, puede usarconvert -list font
para averiguar qué fuentes son compatibles ("FreeMono"
no es universalmente compatible).convert -list font
es la sintaxis correcta, noconvert -list fonts
./etc/ImageMagick-7/policy.txt
que interfiera con ninguno de estos formularios de conversión. ¿Sabes qué política está bloqueando la conversión y por qué está configurada? (También, agarrando a un clavo ardiendo: ¿El hilofmt ...
forma de la obra de comandos, por casualidad Si es así, usted podría reemplazar?fmt
Acat
, y obtener el mismo resultado que la@ascii.txt
versión.)convert
tiene éxito cuando utiliza el-draw
formulario @ garethTheRed e inserta los comandos de posicionamiento en elascii.txt
archivo? Sería bastante extraño si ese fuera el caso, me parece a mí, ya que tengo problemas para imaginar qué problemas de seguridad habría con-annotate
eso que no se aplicarían-draw
, cuando trabaje fuera del contenido de un archivo de texto importado./etc/ImageMagick-6/policy.xml
contiene,<policy domain="path" rights="none" pattern="@*"/>
así que supongo que ese es el. stdin tampoco funciona, presumiblemente porque también tiene el@-
patrón. Para los desesperados,"$(cat ascii.txt)"
funciona si no explota la longitud de la CLI.