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

caty 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
--helpsalida). 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--outdirno 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.jpgimagemagickes tu amigo aquí Algo similar a lo siguiente puede ayudarlo: -¿Dónde
ascii.txtestá tu archivo ascii-art?con
text 15,15agregado 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
-listopción. Entonces, por ejemplo,convert -list fontle 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
-annotateoperador de ImageMagick es un poco más conveniente que el-drawmé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 15x15parte de-drawprimitiva.Especificación de argumentos
El argumento
-fontpuede 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-listoperador, porconvert -list fontlo 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 menospointsizepí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
-trimy-borderpara 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
+repagefinal 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
convertconsumir 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 enconvertlugar de leerlo directamente desde el archivo:Eso representará el contenido de
ascii.txtDejaVu Sans Condensed de 24 puntos, después de que haya sido procesado por elfmtcomando, 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
fmtha reformateado el texto, seconvertpasará a él y luego se generará lafmtsalida 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
annotateargumento 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.pngdónde123está el tamaño deseado. Además, puede usarconvert -list fontpara averiguar qué fuentes son compatibles ("FreeMono"no es universalmente compatible).convert -list fontes la sintaxis correcta, noconvert -list fonts./etc/ImageMagick-7/policy.txtque 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?fmtAcat, y obtener el mismo resultado que la@ascii.txtversión.)converttiene éxito cuando utiliza el-drawformulario @ garethTheRed e inserta los comandos de posicionamiento en elascii.txtarchivo? 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-annotateeso que no se aplicarían-draw, cuando trabaje fuera del contenido de un archivo de texto importado./etc/ImageMagick-6/policy.xmlcontiene,<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.