Рубрики
Без рубрики

Генерирование искусства ASCII из цветного изображения с использованием Python

Источник изображения: https://www.pythoncircle.com Добавление нового скрипта в серию сценариев Python. В этом… Tagged с Python3, Python.

Источник изображения: https://www.pythoncircle.com

Добавление нового скрипта в Серия сценариев Python Анкет В этой статье мы увидим, как преобразовать цветное изображение в искусство ASCII.

Зависимости:

Вам нужно будет установить Pillow Python Package. Рекомендуется, чтобы вы Создать виртуальную среду Использование Python3, если не создано.

Как только виртуальная среда активирована, используйте команду PIP установить подушку для установки пакета.

Шаги:

Мы выступаем ниже действий, чтобы генерировать искусство ASCII с изображения.

  • Получите путь изображения в качестве аргумента командной строки.
  • Откройте изображение с предоставленного пути.
  • Рассчитайте соотношение сторон.
  • Изменить размер изображения. Здесь мы берем новую ширину как 120 пикселей. Регулировка новой высоты в соответствии с соотношением сторон.
  • Преобразовать изображение в формат серого.
  • Получите все пиксели изображения. Замените пиксели интенсивностью в определенном диапазоне с символом из списка.
  • Распечатайте изображение и сохраните в текстовый файл.

Код:

import sys
from PIL import Image

# pass the image as command line argument
image_path = sys.argv[1]
img = Image.open(image_path)

# resize the image
width, height = img.size
aspect_ratio = height/width
new_width = 120
new_height = aspect_ratio * new_width * 0.55
img = img.resize((new_width, int(new_height)))
# new size of image
# print(img.size)

# convert image to greyscale format
img = img.convert('L')

pixels = img.getdata()

# replace each pixel with a character from array
chars = ["B","S","#","&","@","$","%","*","!",":","."]
new_pixels = [chars[pixel//25] for pixel in pixels]
new_pixels = ''.join(new_pixels)

# split string of chars into multiple strings of length equal to new width and create a list
new_pixels_count = len(new_pixels)
ascii_image = [new_pixels[index:index + new_width] for index in range(0, new_pixels_count, new_width)]
ascii_image = "\n".join(ascii_image)
print(ascii_image)

# write to a text file.
with open("ascii_image.txt", "w") as f:
 f.write(ascii_image)

Если вы получаете удлиненное изображение в терминале, вы можете соответствующим образом отрегулировать высоту. Я генерирую new_height используя формулу new_height * new_width * 0,55 Анкет

Заявление Список (img.getData ()) Возвращает интенсивность списка всех пикселей. Значение интенсивности будет от 0 до 255. Снимите значение, темнее цвет. Вот почему у нас есть символы в списке символов, расположенных от более высокой интенсивности до более низкой интенсивности.

Значение Pixel//25 где 25 – диапазон интенсивности для одного персонажа, может быть от 0 до 11, т. Е. Почему в charslist состоит 11 символов. Вы можете сохранить больше символов в списке, скажем, 16 символов, а затем сохранить размер диапазона как 17.

Линия new_pixels = [chars [pixel//25] для пикселя в пикселях] Заменяет пиксели с интенсивностью от 0 до 25 с первым символом из списка Chars и 26-50 с персонажем секунд из списка Chars и так далее.

В последних строках мы разбиваем строку на матрицу и печатаем ее.

Как использовать скрипт:

Чтобы запустить команду сценария, используйте ниже.

python3 script_name path_to_image

python3 image_to_ascii.py /home/Downloads/image.png

Код доступен на GitHub .

Больше от https://www.pythoncircle.com

Оригинал: “https://dev.to/anuragrana/generating-ascii-art-from-colored-image-using-python-4ace”