Hlavní navigace

Bitmapa jako ASCII

21. 12. 2011 22:17 (aktualizováno) Jan Kulhánek

Všichni jsme to už někde viděli, ale málokdo to už zkoušel vytvořit – obrázky složené z písmenek neboli z ASCII kódu. Je to jednoduché a výsledek vypadá dobře, pokud zvolíme dostatečně kontrastní fotografii či kresbu. Tohle téma mě teď napadlo, protože uvažuju o letošním PFku a mám chuť na něco trochu netradičního.

Takže chceme-li se pustit do konverze bitmapy do ASCII, máme několik možností jak na to. Buď použijeme online webovou službu, nebo budeme instalovat nějakou utilitku – a nebo plugin do GIMPu.

Online konverzi nabízejí např. následující weby:

http://lunatic.no/ol/img2aschtml.php

Více možností nastavení

http://www.text-image.com/

Bez nastavení parametrů, ale výsledek slušný

http://picascii.com/

Prostě další možnost

Pokud chceme použít utilitku, můžeme nainstalovat jp2a, v několika distribucích jí najdeme přímo v repozitáři.

Komplexnější nástroj se jmenuje JavE a jak název vypovídá, je napsaný v Javě. ASCII grafiku v něm můžeme přímo tvořit a nabízí i možnost animovat. Instalace je snadná – nejprve se ujistíme, že máme nainstalované prostředí OpenJDK, pak stáhneme archiv, rozbalíme a souboru Jare5.jar dáme práva pro spouštění. Pro korektní fungování bude aplikace vyžadovat stažení fontu a nakopírování do adresáře s programem.

Nakonec jsem narazil na plugin pro GIMP – přesný název je GIMP ASCII Load/Save Plugin, zatím jsem nezkoušel plugin nainstalovat.

A na závěr jsem náhodou narazil na jednoduchý php skript, který převádí jpg na ASCII:

<html> <head> <title>Ascii</title> <style> body{ line-height:1px; font-size:1px; } </style> </head> <body> <?php function getext($filename) { $pos = strrpos($filename,'.'); $str = substr($filename, $pos); return $str; } $image = 'image.jpg'; $ext = getext($image); if($ext == ".jpg"){ $img = ImageCreateFromJpeg($image); } else{ echo'Wrong File Type'; } $width = imagesx($img); $height = imagesy($img);

for($h=0;$h<$height;$h++){ for($w=0;$w<=$width;$w++){ $rgb = ImageColorAt($img, $w, $h); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; if($w == $width){ echo '<br>'; }else{ echo '<span style="color:rgb('.$r.','.$g.','.$b.');">#</span>'; } } } ?> </body> </html>