Программ не знаю, так как никогда такое не делал, однако представляю, как такое можно сделать самому, с нуля. Дело в том, что символ состоит из точек. В разных символах горят разные точки из этой матрицы. Это ещё называют маской символа. Возьмём, к примеру матрицу 8 на 10 точек. Это в сумме получается 8*10=80 точек. Одни символы более витиеватые, поэтому занимают больше точек из этой матрицы. Другие наоборот почти ничего не занимают. Пример: точка и запятая - занимают всего от 1 до 7 точек. А такой, знак, как @ конечно займёт больше точек. Поэтому символы, занимающие мало точек могут заменить точки картинки с маленькой яркостью, а символы, занимающие много точек заменят точки с высокой яркостью.
При замене можно, конечно делать это вручную, однако это долго. Поэтому можно составить программу, которая сама всё заменит. Конечно тем, кто не знаком с программированием лучше скачать готовую программу или попросить помочь того, кто разбирается. Нужно выделить несколько символов, разной видимости (занимающие много точек - более видимые, а занимающие мало точек - менее видимые).
Затем организовать 2 цикла (один вложен в другой), к примеру снаружи цикл отсчитывающий строки, а внутри столбцы. И в этих циклах считывать по очереди точки картинки и анализируя яркость точки находить ей замену подходящим символом. Удобнее, конечно сначала перевести картинку в черно-белый формат (можно сделать в Пэйнте), либо находить среднее арифметическое между яркостями трёх составляющих RGB. А можно за максимум яркости взять когда яркости всех трёх составляющих равны 255. Тогда максимальной шкалой будет 255+255+255=765, а минимальной 0+0+0=0. Тогда яркость будет вычисляться не средним арифметических, а суммированием яркостей трёх составляющих.
Задачка довольно простенькая. В ней самое трудное (хоть и это не очень трудно) выбрать нужные символы, из которых будешь составлять картинку.