¿Existe un programa de línea de comandos que pueda convertir una imagen en una imagen artística ASCII?

19

¿Existe un programa de línea de comandos (para Linux) que pueda convertir una imagen a ascii art y luego guardar esa salida como una imagen, por ejemplo, jpg o png?

Para ilustrar lo que necesito, quiero convertir la siguiente imagen en arte ascii ingrese la descripción de la imagen aquí

El resultado que deseo de un programa debería ser similar a este, que fue creado al tomar una captura de pantalla del resultado de un convertidor de imagen a ASCII (el resultado era texto puro)

ingrese la descripción de la imagen aquí

Soy consciente de que GIMP tiene la capacidad de guardar una imagen como arte ascii y aview también puede convertir una imagen a ascii. Sin embargo, lo primero no se puede hacer a través de la línea de comando y lo segundo solo le permite ver el resultado, no guardarlo (no quiero recurrir a tomar una captura de pantalla del resultado).

También soy consciente de que libcaca puede guardar su salida en una imagen, pero solo genera ascii coloridos, como a continuación.

ingrese la descripción de la imagen aquí

Hecho convirtiendo la imagen de origen a escala de grises y luego con el siguiente comando:

img2txt -W 70 -f tga input.jpg > output.tga

La razón para querer un programa de línea de comandos es procesar por lotes una carpeta llena de imágenes.

holacatfood
fuente
1
Nunca lo he intentado, pero sé que es posible canalizar texto a convert(ImageMagick). Si configura la salida -f de img2txt en ansi (en lugar de ansi de color), puede canalizar el resultado para convertir (u otro software adecuado)
horatio
@horatio: convertir parece esperar una entrada de archivo y se niega a leer desde una tubería. Podemos hacerlo a través de un archivo temporal de todos modos.
Takkat
Relacionado: askubuntu.com/questions/298200/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

7

Puede usar este código de Python que creé para crear arte ascii a partir de imágenes fijas y videos:

https://gist.github.com/lindylex/9374326

Salida de ejemplo

Original ingrese la descripción de la imagen aquí

Salida de arte ASCII ( python ascii_movie_image_ver_1.py cat.jpg 4 10) ingrese la descripción de la imagen aquí

lindylex
fuente
2
los enlaces van y vienen, incluso si es su propio sitio ... ¿podría agregar dos capturas de pantalla de "antes" y "después" usando su código?
Ilan
44
@Ilan He agregado un ejemplo y señalé un repositorio público de git
hellocatfood
14

En caso de que parezca que está ejecutando Linux, puede unir las aplicaciones fácilmente para obtener el resultado deseado. Esto también se puede incorporar en su secuencia de comandos de procesamiento por lotes.

El siguiente ejemplo hace uso de jp2a , un potente conversor de JPG a arte ASCII con muchas opciones para lograr los resultados deseados (consulte la página de manual). Luego procesamos aún más el archivo de texto ASCII resultante en una imagen usando la conversión de la suite ImageMagick . Nuevamente, hay muchas opciones para ajustar el resultado. Es probable que ambas aplicaciones estén disponibles en los repositorios de su distribución.

El siguiente script de ejemplo producirá una imagen de arte ASCII (el formato depende de la extensión que le demos, .jpges para JPEG) a partir de una imagen JPEG de entrada. La fuente se representa con un ancho de 160 caracteres a 6 pt. Esto solo se ajustará al tamaño de página predeterminado como está predefinido desde la conversión.

#! /bin/bash
#Usage ./j2asc infile.jpg outfile.jpg

echo "converting $1 to $2"
jp2a --width=160 -i  $1 --output=tmp.txt
convert -font Courier -pointsize 6 tmp.txt $2
Takkat
fuente
Esto es probablemente lo más cerca que llegaré a mi salida deseada. ¡Gracias!
hellocatfood
¿Hay alguna manera de especificar el ancho para que sea algo diferente 835px? Quiero convertir el arte ascii en una 1920x1080imagen de fondo de pantalla, pero cuando paso la -resize 1920x1080opción, el ancho permanece en 835px.
@awashburn: el tamaño de la imagen está determinado por el número de caracteres (ancho) y el tamaño del punto. Amplíe el tamaño del punto para una salida más grande o escale la imagen resultante en una segunda ejecución.
Takkat
1
Para los usuarios de MacOS: jp2a también está disponible a través de homebrew y funcionando: brew install jp2a.
k0pernikus
1
Ten en cuenta también una salida directa a html en algunos casos: jp2a --html --width=160 --chars="\'\"love" input.jpg --output=output.htm. Puede especificar su conjunto preferido de caracteres para la representación (deberá escapar de los metacaracteres si desea usarlos). Para jp2a ver también AUR para Arch .
2

En Node.js Knockout 2012, hubo una presentación ganadora que tomó un video de la cámara web y escupió un "feed ascii":

Asciigrama

Página de asciigrama

Asciigram es una "herramienta de productividad" que le permite crear videos e imágenes ASCII utilizando su cámara web. También puede crear imágenes ASCII arrastrando imágenes a la página. [Enlace]

No es exactamente la línea de comando, pero tal vez pueda adaptarla para sus necesidades. La biblioteca que usan para convertir la imagen a ascii se llama Jscii .

JohnB
fuente
1
Solo genera texto y no imágenes. Además, no es un programa de línea de comando
hellocatfood
2

Yo uso jp2a para el arte ascii. Fácil de usar desde la línea de comandos:

jp2a --width=76 file.jpg

Y puede probar los resultados en línea en asciiconvert.com .

hoju
fuente
jp2a ya está en la lista , y su enlace no agrega nada (no se abre).
usr2564301
1

Parece que estás usando Linux y ya conoces libcaca. Hay otra biblioteca que hace exactamente lo que dices (Imagen a Ascii en la línea de comando): Aalib .

Hay muchos programas que hacen esto. Este funciona tanto en Linux como en Windows . No utiliza bibliotecas externas, código fuente completo disponible, etc.

Ramon
fuente
Por lo que sé, Aalib no puede guardar su salida directamente en una imagen; sería necesario utilizar algún método que incluya capturas de pantalla, lo que no sería confiable para imágenes grandes. Si hay una manera de hacerlo usando Aalib, ¿podría actualizar su respuesta? El programa que mencionaste se ve muy bien. ¿Hace la conversión por lotes y hay una interfaz de línea de comandos para ello?
hellocatfood
1

Siempre que sepa que el programa no tiene una interfaz de línea de comando, pero convierte imágenes a texto y luego a imágenes. Source está disponible, por lo que puede usarlo para escribir su propia herramienta.

Tienes razón, aalib no genera imágenes, pero genera texto. Además de muchos otros programas que funcionan en la línea de comandos.

Si está utilizando Linux, hay un programa de línea de comandos llamado asciitopgm que convertirá el texto ascii en un mapa de bits. Es parte del paquete netpbm.

Para que pueda usar una combinación de herramientas:

  1. aalib para dibujar una imagen usando texto
  2. asciitopgm para crear un mapa de bits pgm con el archivo de texto.
  3. (opcional) Use convertir (del paquete Imagemagick) para convertir el pgm a cualquier otro formato ráster que desee.

Creo que puedes hacer lo que quieras de esta manera.

Ramon
fuente
0

Sí, hay una herramienta llamada jp2aque básicamente convierte una imagen jpg en un arte ascii.

P.ej:

$ jp2a skull.jpg

Original Skull.jpg

ingrese la descripción de la imagen aquí

Arte Ascii de salida

ingrese la descripción de la imagen aquí

Asegúrese de usar la imagen jpg. Si su imagen está en otro formato, puede cambiarla

$ convert skull.png skull.jpg
y.kashyap007
fuente
1
Hola y bienvenidos a GDSE! Esto parece una respuesta duplicada. Puede mejorarlo editándolo o eventualmente puede eliminarse.
curioso