Автор оригинала: Mike Driscoll.
Есть много забавных фрагментов Python, что вы можете использовать для преобразования ваших фотографий в ASCII Art. Энтони Шоу, автор и вкладчик в настоящем Питоне, имеет его Собственный фрагмент на Github Отказ Большинство из этих небольших программ используют Пакет подушек Отказ
Эти программы лучше всего работают с простыми изображениями, особенно у которых нет фонов. Программа Shaw использует Анасиколоры Пакет, чтобы добавить немного цвета в ваше искусство ASCII.
Вот программа SHAW в целом:
""" image2ansi.py usage: image2ansi.py [-h] [--no-color] [--width WIDTH] path Display an image in ASCII with ANSI colors positional arguments: path the path to the image file optional arguments: -h, --help show this help message and exit --no-color no ANSI colors --width WIDTH output width in characters (Default 120) Features: - Converts ALPHA channel to whitespace (transparency) - Uses a sharpness filter to improve the output Requires: - Python 3 - Pillow - ansicolors Install: - pip3 install pillow ansicolors """ import argparse from PIL import Image, ImageEnhance from colors import color def render(image_file, width=120, height_scale=0.55, colorize=True): img = Image.open(image_file) org_width, orig_height = img.size aspect_ratio = orig_height / org_width new_height = aspect_ratio * width * height_scale img = img.resize((width, int(new_height))) img = img.convert('RGBA') img = ImageEnhance.Sharpness(img).enhance(2.0) pixels = img.getdata() def mapto(r, g, b, alpha): if alpha == 0.: return ' ' chars = ["B", "S", "#", "&", "@", "$", "%", "*", "!", ".", " "] pixel = (r * 19595 + g * 38470 + b * 7471 + 0x8000) >> 16 if colorize: return color(chars[pixel // 25], (r, g, b)) else: return chars[pixel // 25] new_pixels = [mapto(r, g, b, alpha) for r, g, b, alpha in pixels] new_pixels_count = len(new_pixels) ascii_image = [''.join(new_pixels[index:index + width]) for index in range(0, new_pixels_count, width)] ascii_image = "\n".join(ascii_image) return ascii_image if __name__ == "__main__": parser = argparse.ArgumentParser(description='Display an image in ASCII with ANSI colors') parser.add_argument('path', metavar='path', type=str, help='the path to the image file ') parser.add_argument('--no-color', action='store_true', help='no ANSI colors') parser.add_argument('--width', action='store', type=int, default=120, help='output width in characters (Default 120)') parser.add_argument('--height-scale', action='store', default=.55, type=float, help='scale ratio for height (default .55') args = parser.parse_args() print(render( args.path, args.width, height_scale=args.height_scale, colorize=not args.no_color))
Вы можете использовать эту программу на любом изображении, который у вас есть. Чтобы увидеть, как вы можете использовать эту программу, вы можете использовать эту фотографию автора этой статьи:
Чтобы запустить программу, вы откроете терминал и измените каталоги, пока не находитесь в той же папке, к которой программа сохраняется. Тогда вы запускаете следующую команду:
python3 image2ansi.py my_photo.jpg
При запуске этой программы на изображение выше, вы получите следующий вывод:
Вы можете увидеть, что преобразование удаляет много деталей с изображения, которое следует ожидать.
Теперь давайте попробуем эту программу на прощественную картинку, как Tux, Penguin:
Когда вы запустите image2ansi.py На этом изображении ваш выход будет выглядеть так:
Это преобразование выглядит намного больше похоже на оригинальное изображение, чем предыдущий.
Программы, как image2ansi.py очень весело играть с. Иди, попробуйте или посмотрите, можете ли вы придумать лучшего. Весело и счастливое кодирование!