Busindre » Blog Archive » AscII Art con Libcaca en GNU/Linux y demás Unix

AscII Art con Libcaca en GNU/Linux y demás Unix

June 9th, 2008 by Busindre

libcaca es una librería gráfica que muestra caracteres en lugar de píxeles, esto ofrece la posibilidad de poder trabajar bajo tarjetas de video muy antiguas y en terminales de texto, es similar a la librería AAlib pero con soporte para Unicode, dispone de 2048 colores disponibles (Depende de la tarjeta de video puede que solo se soporten 16), también tiene varios algoritmos de tramado (dithering) de color y otras posibilidades que AAlib no proporcionaba. Libcaca puede trabajar en todos los sistemas Unix, incluido Mac OS X, usando las librerías S-Lang o ncurses, también funciona bajo el sistema operativo Windows de Microsoft. Libcaca, entre otras funciones, nos proporciona con sus utilidades la capacidad de ver vídeos en ASCII (mplayer / vlc), visualizar y transformar imágenes a ascii para usarlo en documentos html, texto o incluso IRC. La creación de animaciones caca se realiza mediante lenguaje C + libcaca (Picando código), tenemos muestras de animaciones con su código fuente dentro del directorio src de las fuentes de libcaca. Vamos a ver como se usa y se instala esta librería, resolviendo algunos problemas que podemos encontrarnos en su compilación.

Descargar Libcaca: http://libcaca.zoy.org/wiki/libcaca

Compilar / Instalar Libcaca

$ tar -zxvf libcaca-0.99.beta13b.tar.gz
$ cd libcaca-0.99.beta13b/
$ ./configure --prefix=/usr --enable-ncurses --enable-slang --enable-x11 --enable-gl --enable-network --enable-imlib2 --enable-plugins
$ make
# make install ó checkinstall

NOTA: Imlib2 es una dependencia necesaria para que libcaca pueda hacer uso de ficheros que no sean BMP, por eso debemos añadir esta dependencia antes de realizar el .configure de no tenerla instalada.

Instalando Imlib2: http://sourceforge.net/project/showfiles.php?group_id=2&package_id=11130

Compilar / instalar Imlib2

$ tar -zxvf imlib2-1.4.0.tar.gz
$ cd imlib2-1.4.0
$ ./configure --prefix=/usr
$ make
# make install ó checkinstall

Comandos / Utilidades que Libcaca nos ofrece

Cacaplay: Visualiza imágenes en formato caca o reproduce animaciones libcaca (libcaca animation files) que son hechas en C.

Animación:

$ CACA_DRIVER=raw CACA_GEOMETRY=80x32 cacademo | cacaplay

Imagen:

$ img2txt -f caca busi_ascii.png > cacaprueba && cacaplay cacaprueba

NOTA: Como vemos primero debemos pasar la imagen al formato caca.

Caca server: Nos permite visualizar animaciones o videos (Flash, avi, wmv, mp4,...) en formato caca en el puerto 51914. Los vídeos que no son animaciones nativas de caca debemos pasarlas por la librería caca entes de ser reproducidas, mediante mplayer -vo caca video y luego mandarle esa salida en formato caca al servidor cacaserver para que la ofrezca en un determinado puerto.

Reproducir animación caca:

$ CACA_DRIVER=raw cacademo | cacaserver

Reproducir stream de un video cualquiera con cacaserver:

$ CACA_DRIVER=raw mplayer -vo caca /home/busi/FlashuqIX1u | cacaserver

Cacaview: Visor de imágenes en formato caca, soporta muchos tipos de imágenes si fué compilado con la dependencia Imlib2 (bmp, png, gif, jpeg,..)

$ cacaview /home/bill/Imagenes/*

img2txt: Aplicación que permite convertir imágenes a Ascii Art, ya sean en modo texto, formato caca, formato irc, html, svg o cualquiera de los que ahora veremos a continuación. Veamos como funciona y que opciones tiene

Opciones de img2txt:

-h, --help -> Muestra la ayuda.
-v, --version -> Muestra la versión.
-W, --width=WIDTH -> Estipula el ancho de salida.
-H, --height=HEIGHT -> Estipula el largo de salida.
-x, --font-width=WIDTH -> Estipula el ancho relativo a los caracteres.
-y, --font-height=HEIGHT -> Estipula el ancho relativo a los caracteres.
-b, --brightness=BRIGHTNESS -> Define el nivel de brillo.
-c, --contrast=CONTRAST -> Define el contraste.
-g, --gamma=GAMMA -> Define la cantidad de ganma.
-d, --dither=DITHER -> Define el algoritmo de tramado

none : Color más cercano
ordered2 : Ordered 2x2
ordered4 : Ordered 4x4
ordered8 : Ordered 8x8
random : Randon
fstein : Floyd Steinberg (Predeterminado)

-f, --format=FORMAT -> Define el formato

ansi : ANSI coloreado (default)
caca : Formato interno libcaca (Visualizable con cacaview)
utf8 : UTF8 con CR
utf8 : UTF8 con CRLF (MS Windows)
html : HTML con CSS y soporte DIV
html3 : HTML3 puro con tablas
irc : IRC con codigos ctrl-k
ps : Postscript
svg : Scalable Vector Graphics
tga : Targa

NOTA: El dithering (tramado) es una técnica empleada en programas de diseño gráfico para dar la ilusión de tonos de gris o de color continuos, y hacer que una imagen con limitación en la disponibilidad de colores aparezca como si contuviese más.

Ejemplo de uso de img2txt :

$ img2txt -W 140 -H 80 -g 0 -d none -f html fotos_busi/Imagen\(198\).jpg > fichero2.html

¿Como cambiar el puerto donde escucha cacaserver?

El puerto que usa cacaserver para servir cierto contenido es el 51914, que en hexadecimal es 0xCACA, para cambiarlo debemos editar antes de la compilación el siguente fichero:

Original:

src/cacaserver.c: server->port = 0xCACA; /* 51914 */

Nuevo puerto (51930):

src/cacaserver.c: server->port = 0xCADA; /* 51930 */

NOTA: Se debe especificar en hexadecimal.

¿Como usar mplayer para ver películas en ASCII?

$ mplayer -vo caca video

NOTA: Al pasar la salida por las librerías caca (Opción -vo caca), nos permite poder visualizar el vídeo en las tty (Cntrl + Alt + Teclas F) ya que se usan caracteres y no píxeles.

¿Como usar mplayer para ver películas en ASCII?

Veamos algunos errores que podemos encontrar a la hora de intentar compilar Libcaca en nuestra distro:

Error en el configure:

checking for GL/glut.h... yes
checking for glutCloseFunc in -lglut... no
checking for glutMainLoopEvent in -lglut... no
checking for glutCheckLoop in -lglut... no
configure: error: cannot find OpenGL+FreeGLUT development files

Solución:

Descargar freeglut: http://prdownloads.sourceforge.net/freeglut/freeglut-2.4.0.tar.gz?download

$ tar -zxvf freeglut-2.4.0.tar.gz
$ cd freeglut-2.4.0
$ ./configure --prefix=/usr
$ make
$ make install ó checkinstall

Error en el make:

gmcs -unsafe AssemblyInfo.cs Cucul.cs -out:cucul-sharp.dll -target:library \
-r:System.Drawing.dll
/opt/mono-1.2.6/bin/gmcs: line 2: /home/busi/mono-1.2.6/bin/mono: No existe el fichero o el directorio
/opt/mono-1.2.6/bin/gmcs: line 2: exec: /home/busi/mono-1.2.6/bin/mono: cannot execute: No existe el fichero o el directorio
make[2]: *** [cucul-sharp.dll] Error 126
make[2]: se sale del directorio `/home/busi/libcaca-0.99.beta13b/csharp'
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio `/home/busi/libcaca-0.99.beta13b'
make: *** [all] Error 2

Solución:

Antes del make realizamos este enlace para nuestro caso:

$ ln -s /opt/mono-1.2.6 /home/busi/

Después del make:

$ rm /home/busi/mono-1.2.6

NOTA: Este error puede variar dependiendo de donde tengamos instalado mono, pero el proceso sería el mismo.

Error en el make:

(cd .libs && rm -f cucul.la && ln -s ../cucul.la cucul.la)
make[2]: se sale del directorio `/home/busi/libcaca-0.99.beta13b/ruby'
Making all in doc
make[2]: se ingresa al directorio `/home/busi/libcaca-0.99.beta13b/doc'
doxygen doxygen.cfg
make[2]: *** [stamp-doxygen] Violación de segmento
make[2]: se sale del directorio `/home/busi/libcaca-0.99.beta13b/doc'
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio `/home/busi/libcaca-0.99.beta13b'
make: *** [all] Error 2

Solución:

La solución es indicarle en la compilación que NO genere la documentación de libcaca (--disable-doc), debemos ejecutar estos comandos una vez el make nos falle. En futuras versiones debería estar solucionado:


$ make clean
$ ./configure --prefix=/usr --enable-ncurses --enable-slang --enable-x11 --enable-gl --enable-network --enable-imlib2 --enable-plugins --disable-doc
$ make
$ make install ó checkinstall

Posted in Curiosidades |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.