Узнайте, как сгенерировать искусство ASCII из изображения с помощью Python.
Шаги по преобразованию изображения в символ ASCII
- Загрузить изображение
- Изменить размер изображения
- Преобразовать изображение в GreyScale
- Преобразование данных GreyScale каждого пикселя в соответствующий символ ASCII
Загрузка изображения с использованием библиотеки изображений PIL
Для загрузки изображения мы будем использовать PIL
библиотеку.
import PIL.Image
def main():
path = input("Enter the path to the image fiel : \n")
try:
image = PIL.Image.open(path)
except:
print(path, "Unable to find image ");
Приведенный выше код считывает изображение с пути, указанного пользователем. Если изображение не существует на указанном пути, мы покажем сообщение об ошибке.
Определить список ASCII
Давайте создадим список символов ASCII,
ASCII_CHARS = ["@", "#", "$", "%", "?", "*", "+", ";", ":", ",", "."]
Символы ASCII расположены от самых темных до самых светлых. Это означает, что самый темный пиксель будет заменен на @
, а самый светлый - на .
.
Изменить размер изображения
Нам нужно преобразовать изображение в небольшую ширину и высоту, чтобы в результате не получился текст большого размера. Чтобы найти new_height
, умножьте new_width
на old_height
, затем разделите на old_width
.
def resize(image, new_width = 100):
width, height = image.size
new_height = new_width * height / width
return image.resize((new_width, new_height))
Преобразовать изображение в шкалу серого
Мы можем использовать метод convert
на image
с опцией L
, чтобы получить изображение в масштабе серого.
def to_greyscale(image):
return image.convert("L")
Преобразование изображения шкалы серого в символ ASCII
Чтобы сначала преобразовать изображение в символ ASCII, получите значение каждого пикселя(0-255)
. Получите соответствующий символ ASCII и объедините их как строку
def pixel_to_ascii(image):
pixels = image.getdata()
ascii_str = "";
for pixel in pixels:
ascii_str += ASCII_CHARS[pixel//25];
return ascii_str
Теперь у нас есть метод to_greyscale
для преобразования изображения в изображение GreyScale, метод pixel_to_ascii
для преобразования изображения GreyScale в строку ASCII, как только мы получим строку ASCII изображения, нам нужно разделить строку на основе ширины изображение и сохраните его в файл.
import PIL.Image
def main(): path = input("Enter the path to the image fiel : \n") try: image = PIL.Image.open(path) except: print(path, "Unable to find image ")
#resize image image = resize(image);
#convert image to greyscale image greyscale_image = to_greyscale(image)
# convert greyscale image to ascii characters ascii_str = pixel_to_ascii(greyscale_image)
img_width = greyscale_image.width ascii_str_len = len(ascii_str) ascii_img=""
#Split the string based on width of the image for i in range(0, ascii_str_len, img_width): ascii_img += ascii_str[i:i+img_width] + "\n"
#save the string to a file with open("ascii_image.txt", "w") as f: f.write(ascii_img); main()
Спасибо за прочтение. Следуйте Javascript Jeep🚙💨 для получения дополнительных руководств
Уровень кодирования
Спасибо, что стали частью нашего сообщества! Подпишитесь на наш канал YouTube или присоединитесь к Интервью по программированию Skilled.dev.