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

Blackfid

Новичoк
  • Публикации

    19
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Blackfid


  1. Многие начинающие программисты на 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()
    

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


  2. 4 часа назад, bushman сказал:

    Работал по старой, но решил и новую взять, благо финансы позволяют. Так вот, новая намного лучше по все параметрам. 

    А что в месяц по заработку? Каждый день зарабатываешь?

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