Cómo transformar un archivo de texto en una imagen

Cómo transformar un archivo de texto en una imagen

Si tengo un archivo de texto plano, ¿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)

Respuesta1

imagemagickes tu amigo aquí. Algo similar a lo siguiente puede ayudarte: -

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png

¿ Dónde ascii.txtestá tu archivo 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:::::::::' 
        `':::_:' -- '' -'-' `':_::::'`  
    "

agregado text 15,15como primera línea de texto (el 15,15 es un desplazamiento posicional). Además, asegúrese de que el texto real que se va a convertir esté entre comillas. Las comillas simples o dobles servirán, pero asegúrese de que no se utilicen como parte de su arte ascii, ya que confundirán las cosas.

La fuente que elijas debe ser monoespaciada; de lo contrario, el texto no se alineará.

Esto produce: -

ingrese la descripción de la imagen aquí

Respuesta2

Considero que -annotateel operador de ImageMagick es un poco más conveniente que el -drawmétodo sugerido por garethTheRed, por la sencilla razón de que no requiere modificación del archivo de entrada. No es tan poderoso como -draw, pero sirve para volcar al por mayor el contenido de un archivo de texto en una imagen.

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png

generará una versión renderizada del contenido del archivo dado, pero sin tener que modificar su archivo "ascii.txt" para que contenga la text 15x15parte de la -drawprimitiva.

Especificación de argumentos

El argumento -fontpuede ser cualquier nombre de fuente admitido, si FreeMono no está disponible (o simplemente no se desea). Se puede obtener una lista de las fuentes disponibles para cualquier comando de ImageMagick usando el -listoperador, por lo que convert -list fontse mostrarán todos los argumentos posibles para -font.

Los argumentos para -annotate(hasta qué punto desplazar el texto renderizado desde el borde del lienzo) consisten en desplazamientos de píxeles horizontales y verticales (respectivamente). El primer desplazamiento (desplazamiento x horizontal) puede ser cualquier número entero positivo, pero no es necesario que sea mayor que unos pocos píxeles. El segundo desplazamiento (desplazamiento y vertical)debeseral menosigual al tamaño en puntos de la fuente elegida (el argumento de -pointsize), porque ImageMagick colocará elbasede la fuente en el desplazamiento dado. Entonces, si no desplaza la fuente hacia abajo al menos pointsizeen píxeles, la parte superior de la primera línea se cortará.

Recomiendo repasar al menos varios píxeles, por lo que si lo estás usando -pointsize 64, debes emparejarlo con algo como -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).

Tener que adivinar las dimensiones necesarias de la imagen de salida también puede resultar tedioso. Por lo general, elijo valores excesivos, luego aprovecho ImageMagick -trimy -borderrecorte automáticamente el resultado. El siguiente 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

se representará en un cuadro de 1000x2000, luego recortará el exceso de espacio en blanco excepto 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 apareciera un cuadro de diálogo al cargar preguntando si debe aplicar el desplazamiento.

(Obviamente, 1000x2000 es excesivo para archivos de texto pequeños, y para archivos más largos, es posible que sea necesario aumentar al menos la dimensión vertical. Sin embargo, es más sencillo 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 aún no está formateado de la manera que necesita para renderizarlo (por ejemplo, si usa líneas muy largas), es posible que deba reformatearlo antes de entregárselo a convert. ImageMagick no ajustará el texto, por lo que cada línea de texto se extenderá en toda su longitud horizontalmente. Afortunadamente, es posible ejecutar el archivo a través de cualquier formateador de línea de comandos que desee y luego canalizar el texto procesado converten lugar de leerlo directamente desde el archivo:

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

Eso renderizará el contenido ascii.txten DejaVu Sans Condensed de 24 puntos,despuésha sido procesado por el fmtcomando, que en su modo de operación predeterminado reformateará su entrada ajustando 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 fmthaya reformateado el texto, se pasará a convertdonde se generará la fmtsalida canalizada, igual que si estuviera leyendo el archivo directamente. (Especificar un nombre de archivo -es una abreviatura bastante común del shell UNIX para "leer desde una entrada estándar, en lugar de cualquier archivo de disco con nombre", y las herramientas de ImageMagick siguen esa convención).

Respuesta3

Podrías usar openoffice (libreoffice) para hacerlo.

soffice --convert-to jpg "Textfile.doc"

También funciona con archivos de texto.

Respuesta4

Una solución sencilla es utilizar la pango-viewproporcionada porPango, una biblioteca de representación de texto utilizada en GTK que probablemente ya tengas instalada:

pango-view --font=mono -qo image.png file

puedes crearSVG¡también!

pango-view --font=mono -qo image.svg file

pango-viewTiene muchas opciones de personalización y diseño, consulte su página de manual.

información relacionada