2012-11-13 6 views
3

У меня есть огромный Ascii-текст, представляющий растровое изображение, подобное ASCII-искусству. Теперь я ищу что-то вроде инвертированного генератора Ascii-art. Мне нравится преобразовывать каждый символ в цветной пиксель. Есть ли бесплатный инструмент, который может быть таким?Визуализируйте текст Ascii в растровом изображении

Update: Я закодированы, что небольшой инструмент, используя код, приведенный ниже, это в Интернете по адресу: http://www.webspice.eu/ascii2png/

+0

Поскольку символы не являются квадратами вам может понадобиться, чтобы перевести каждый символ в виде прямоугольной сетки пикселей. У меня возникло соблазн написать такую ​​программу в течение многих лет. –

+0

просто не пойми меня неправильно: мне нравится получать только один пиксель для каждого персонажа. На самом деле это просто программа для себя, но я уверен, что кто-то уже сделал это там;) – abimelex

+0

Самая сложная часть - это создание таблицы цветов для каждого символа. Как только вы это сделали, это дюжина строк Python. –

ответ

0

Я просто закодированы немного очень Spartanic php с использованием библиотеки image-gd. Он читает текст из textarea formular и присваивает цвета символам, используя Ascii-Value и некоторые функции мультипликатора, чтобы сделать различий цвета между соседними Ascii, такими как «a» и «b». Теперь он работает только для известного размера текста.

<?php 

if(isset($_POST['text'])){ 
    //in my case known size of text is 204*204, add your own size here: 
    asciiToPng(204,204,$_POST['text']); 
}else{ 
    $out = "<form name ='textform' action='' method='post'>"; 
    $out .= "<textarea type='textarea' cols='100' rows='100' name='text' value='' placeholder='Asciitext here'></textarea><br/>"; 
    $out .= "<input type='submit' name='submit' value='create image'>"; 
    $out .= "</form>"; 
    echo $out; 
} 

function asciiToPng($image_width, $image_height, $text) 
{ 
    // first: lets type cast; 
    $image_width = (integer)$image_width; 
    $image_height = (integer)$image_height; 
    $text = (string)$text; 
    // create a image 
    $image = imagecreatetruecolor($image_width, $image_height); 

    $black = imagecolorallocate($image, 0, 0, 0); 
    $x = 0; 
    $y = 0; 
    for ($i = 0; $i < strlen($text)-1; $i++) { 
     //assign some more or less random colors, math functions are just to make a visible difference e.g. between "a" and "b" 
     $r = pow(ord($text{$i}),4) % 255; 
     $g = pow(ord($text{$i}),3) % 255; 
     $b = ord($text{$i})*2 % 255; 
     $color = ImageColorAllocate($image, $r, $g, $b); 
     //assign random color or predefined color to special chars ans draw pixel 
     if($text{$i}!='#'){ 
      imagesetpixel($image, $x, $y, $color); 
     }else{ 
      imagesetpixel($image, $x, $y, $black); 
     } 
     $x++; 
     if($text{$i}=="\n"){ 
      $x = 0; 
      $y++; 
     } 
    } 
    // show image, free memory 
    header('Content-type: image/png'); 
    ImagePNG($image); 
    imagedestroy($image); 
} 
?> 

Вы можете найти рабочий инструмент онлайн здесь: http://www.webspice.eu/ascii2png/

2

Вы не использовали тег конкретного языка программирования. Thefore, Mathematica go ..

Я использую Rasterize, чтобы преобразовать письмо в изображение письма. Затем я могу извлечь пиксельную матрицу с ImageData. Mean всего пикселя - это одна возможность рассчитать окончательное значение пикселя для буквы. Подставляя это в функцию, которая запоминает пиксельные-значения, так что мы не должны рассчитать это снова и снова:

toPixel[c_String] := toPixel[c] = Mean[Flatten[ImageData[Rasterize[ 
Style[c, 30, FontFamily -> "Courier"], "Image", ColorSpace -> "Grayscale"]]]] 

Теперь вы можете разделить вашу строку в строки, а затем применить это к каждому символу. После того, как обивка полученных списков, чтобы получить полную матрицу снова у вас есть изображение

data = toPixel /@ Characters[#] & /@ StringSplit[text, "\n"]; 
[email protected](PadRight[#, 40, 1] & /@ data) // ImageAdjust 

Для этого текста

  ,i!!!!!!;, 
     .,;i!!!!!'`,uu,o$$bo. 
    !!!!!!!'.e$$$$$$$$$$$$$$. 
    !!!!!!! $$$$$$$$$$$$$$$$$P 
    !!!!!!!,`$$$$$$$$P""`,,`" 
    i!!!!!!!!,$$$$",oed$$$$$$ 
!!!!!!!!!'P".,e$$$$$$$$"'? 
`!!!!!!!! z$'J$$$$$'.,$bd$b, 
    `!!!!!!f;$'d$$$$$$$$$$$$$P',c,. 
    !!!!!! $B,"?$$$$$P',uggg$$$$$P" 
    !!!!!!.$$$$be."'zd$$$P".,uooe$$r 
    `!!!',$$$$$$$$$c,"",ud$$$$$$$$$L 
    !! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
    !'j$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
    [email protected]@,?$$$$$$$$$$$$$$$$$$$$$$$$$$$$P 
    [email protected]@f:$$$$$$$$$$$$$$$$$$$$$$$$$$$' 
    "" `$$$$$$$$$$$$$$$$$$$$$$$$$$F 
     `3$$$$$$$$$$$$$$$$$$$$$$F 
      `"$$$$$P?$$$$$$$"` 
        `"" 

мы получаем

Mathematica graphics

+0

кажется рабочим решением, но, к сожалению, у меня нет математики, поэтому я попросил бесплатный инструмент ... – abimelex

+0

А, извините, кажется, я пропустил ** бесплатно ** и не сделал заметил это. – halirutan

Смежные вопросы