LINUX.ORG.RU

Написал программу печати GIF-файлов в режиме ASCII Art, gifdump


0

0

Написал программу gifdump - замену программе aview (aka asciiview). Не требует лишних зависимостей, кроме стандартной библиотеки libungif. Работает только с файлами формата GIF (aview работает с форматом PNM).

Язык программирования: Си. Размер: 187 строк. Опубликовано на условиях GNU GPL Version 3.

Web-page: http://lubyagin.discrete.ru/libungif-gifdump.html

★★★★★

А вот хотелось бы смотреть капчи в elinks/... прямо в текстовой консоли через ssh. Причем не в аски-графике, а

1. передавая градации цвета цветом, т.к. 256 цветов поддерживаются

2. одно знакоместо=2 пиксела, т.к. есть шрифты, которые дают квадратик в верхнюю половину знакоместа, и тогда не будет искажения пропорций

www_linux_org_ru ★★★★★
()

цвет прикрутить не очень сложно как esc последовательности терминала

www_linux_org_ru ★★★★★
()

/* Dedicated to Denis, the officeer of the Russian Federal Agency of Security */

Мило.

anonymous4
()

1) я так понимаю, у вас анализируется каждый пиксель, а не область? => изображение вырастет в несколько раз(даже минимальным шрифтом)?

2) Есть параметры GRAYLEVELS и SYMBOLS. Опять-таки, как я понимаю, GRAYLEVELS - это количество символов? зачем нужен лишний параметр? Для создания исключительных ситуаций?

Поправьте где ошибаюсь.

rual_ilmarranen
()
Ответ на: комментарий от z0D5e8n7x_2

>Причем не в аски-графике, а сразу разгаданное

В промышленных масштабах это уже все давно автоматизировано.

www_linux_org_ru ★★★★★
()

Прикольна!

> GNU GPL Version 3 License by Alexander Lubyagin


щито

Sphinx ★★☆☆
()
Ответ на: комментарий от www_linux_org_ru

Получается, что таким образом можно передавать картинку как на ZX-Spectrum'ах, то есть, кодируя сразу несколько пикселей (квадрат) одним цветом. Вас устраивают подобные цветовые искажения?

pacify ★★★★★
() автор топика
Ответ на: комментарий от rual_ilmarranen

1) Изображение можно сжимать, причем, в нашем случае, с экономией в памяти в несколько раз (сканируя по полосам заданной высоты). Таким образом, получаем однопроходный алгоритм преобразования в ASCII Art, используя лишь память объема 256*Width*Height-of-the-Scan-Line, например, сжатие изображения размером 1024x1024x8bpp в восемь раз, потребует памяти под одну полосу точек, объемом 1024*8 = 8192 байт. Одна полоса закодируется одной строкой символов ASCII.

2) По старой привычке программирования на Паскале, где использовалось префиксное кодирование строк: LENGTH+CONTENT (up to 255 bytes).

pacify ★★★★★
() автор топика

Комментарии в тексте программы выносят мозг. Так обязательно комментировать очевидное?

piroflip
()
Ответ на: комментарий от piroflip

А вложенная функция это вообще капец. Вы на жаве чтоль писали раньше? И еще -- если с англицким плохо, лучше вообще не писать коменты. А так, для лабораторной на первом курсе сгодится.

piroflip
()
Ответ на: комментарий от pacify

> Вложенные функции вроде издавна уже в Си есть.

Это gcc-шное расширение, в С99 их нет.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от pacify

> Получается, что таким образом можно передавать картинку как на ZX-Spectrum'ах, то есть, кодируя сразу несколько пикселей (квадрат) одним цветом. Вас устраивают подобные цветовые искажения?

Не несколько, а ровно 2. Один пиксель кодируется цветом бэкграунда, другой цветом шрифта.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от pacify

> Вложенные функции вроде издавна уже в Си есть. 

$ gcc -pedantic -Wall -o gifdump -lungif gifdump.c 
gifdump.c: In function ‘main’:
gifdump.c:65: warning: pointer targets in passing argument 1 of ‘strncpy’ differ in signedness
/usr/include/string.h:130: note: expected ‘char * __restrict__’ but argument is of type ‘unsigned char *’
gifdump.c:88: warning: ISO C forbids nested functions
gifdump.c:88: warning: ISO C90 forbids mixed declarations and code

piroflip
()
Ответ на: комментарий от piroflip

Над такой ерундой думаете. Нам про вложенные в Си рассказывали еще на втором курсе университета в 1996 году.

pacify ★★★★★
() автор топика
Ответ на: комментарий от www_linux_org_ru

Тогда не два, а четыре пикселя - квадрат 2x2 (кодируется псевдографическим символом 2x2 квадрата).

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.