Перейти к публикации

Blackfid

Созданием анимацию для нашего проекта

Рекомендованные сообщения

Многие начинающие программисты на python сталкивались с таким вопросом, какой интерфейс для проекта выбрать. Многие новички писали проекты под текстовый интерфейс. Согласимся, что пользователя надо удивить своим проектом. Если же у вас написан проект под текстовый интерфейс, то эта статья для вас.

С помощью небольшого кода пользователь при открытии увидит небольшую анимацию из символов. Программист в праве поставить любую GIF - анимацию, которая появится при открытии.

  • Посмотрим пример такой анимации:

f30c3c0fbe3fa45a73e2f.gif

Начало

Для начала мы создам GIF - анимацию текста:

Переходим на сайт: textdrom.

578fe90ed3c1576991240.png

Для примера написал текст "OBER LZT".

0c99f4d0f4f08513373d0.png

Указал параметр размера шрифта 146, чтобы анимация текста была во весь GIF-баннер.

fdbf396a245416a3e9764.png

Перейдем в окно "ЦВЕТА, ФОН".

bf0188b9c285f420de1f1.png

В данном разделе выставил цвета текста - белый, цвет объма - черный и фон - черный.

0787dd6851036bdeee8a3.png

Нажимаем "СОХРАНИТЬ" и наблюдаем результат:

dba27c5162fee3766b616.gif

Наш результат сразу загрузится на компьютер под именем download.gif. Нам нужно переименовать его в mygif.gif.

В коде ты сможешь изменить название файла:

66a24e6a89991459af5f0.png66a24e6a89991459af5f0.png

Перейдем к коду

Установим библиотеки

pip install pillow
pip install opencv (если не работает, пробуйте: pip install opencv-python

Код который преобразует наш GIF - баннер в анимацию символов (ASCII):

from PIL import Image, ImageDraw, ImageFont
import os
import time
import sys

def extract_gif_frames(gif, fillEmpty=False):
    frames = []
    try:
        while True:
            gif.seek(gif.tell() + 1)
            new_frame = Image.new('RGBA', gif.size)
            new_frame.paste(playgif, (0, 0), playgif.convert('RGBA'))

            if fillEmpty:
                canvas = Image.new('RGBA', new_frame.size, (255, 255, 255, 255))
                canvas.paste(new_frame, mask=new_frame)
                new_frame = canvas

            frames.append(new_frame)
    except EOFError:
        pass
    return frames

def convert_image_to_ascii(image):
    font = ImageFont.load_default()
    (chrx, chry) = font.getsize(chr(32))
    weights = []
    for i in range(32, 127):
        chrImage = font.getmask(chr(i))
        ctr = 0
        for y in range(chry):
            for x in range(chrx):
                if chrImage.getpixel((x, y)) > 0:
                    ctr += 1
        weights.append(float(ctr) / (chrx * chry))

    output = ""
    (imgx, imgy) = image.size
    imgx = int(imgx / chrx)
    imgy = int(imgy / chry)
    image = image.resize((imgx, imgy), Image.BICUBIC)
    image = image.convert("L")
    pixels = image.load()
    for y in range(imgy):
        for x in range(imgx):
            w = float(pixels[x, y]) / 255
            wf = -1.0;
            k = -1
            for i in range(len(weights)):
                if abs(weights[i] - w) <= abs(wf - w):
                    wf = weights[i];
                    k = i
            output += chr(k + 32)
        output += "\n"
    return output

def convert_frames_to_ascii(frames):
    ascii_frames = []
    for frame in frames:
        new_frame = convert_image_to_ascii(frame)
        ascii_frames.append(new_frame)
    return ascii_frames

def animate_ascii(ascii_frames, frame_pause=.001, num_iterations=60, clear_prev_frame=True):
    for i in range(num_iterations):
        for frame in ascii_frames:
            print(frame)
            time.sleep(frame_pause)
            if clear_prev_frame:
                os.system('cls')

def start_program():
    print('Привет, это небольшое дополнение к нашему коду')
    print('С помощью такого небольшого дополнения вы сможете визуализировать программу в cmd еще лучше')
    fg = input()


playgif = Image.open("mygif.gif")
frames = extract_gif_frames(playgif, fillEmpty=True)
ascii_frames = convert_frames_to_ascii(frames)
animate_ascii(ascii_frames, num_iterations=2)
start_program()

При запуске проекта будет запускаться анимация.

Изменено пользователем Blackfid

Поделиться сообщением


Ссылка на сообщение

Похоже немного на извращение, когда запускаешь распознование текста с картинки, для анимации.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...