Многие начинающие программисты на python сталкивались с таким вопросом, какой интерфейс для проекта выбрать. Многие новички писали проекты под текстовый интерфейс. Согласимся, что пользователя надо удивить своим проектом. Если же у вас написан проект под текстовый интерфейс, то эта статья для вас.
С помощью небольшого кода пользователь при открытии увидит небольшую анимацию из символов. Программист в праве поставить любую GIF - анимацию, которая появится при открытии.
Начало
Для начала мы создам GIF - анимацию текста:
Переходим на сайт: textdrom.
Для примера написал текст "OBER LZT".
Указал параметр размера шрифта 146, чтобы анимация текста была во весь GIF-баннер.
Перейдем в окно "ЦВЕТА, ФОН".
В данном разделе выставил цвета текста - белый, цвет объёма - черный и фон - черный.
Нажимаем "СОХРАНИТЬ" и наблюдаем результат:
Наш результат сразу загрузится на компьютер под именем download.gif. Нам нужно переименовать его в mygif.gif.
В коде ты сможешь изменить название файла:
Перейдем к коду
Установим библиотеки
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 - w) <= abs(wf - w):
wf = weights;
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()
При запуске проекта будет запускаться анимация.
С помощью небольшого кода пользователь при открытии увидит небольшую анимацию из символов. Программист в праве поставить любую GIF - анимацию, которая появится при открытии.
- Посмотрим пример такой анимации:

Начало
Для начала мы создам GIF - анимацию текста:
Переходим на сайт: textdrom.

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

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

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

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

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

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


Перейдем к коду
Установим библиотеки
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 - w) <= abs(wf - w):
wf = weights;
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()
При запуске проекта будет запускаться анимация.