Как применить стиль css к тексту в pygame?
import pygame
class Text():
def __init__(self, text):
self.style = 'color: rgb(100, 100, 100);'
self.text = text
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((550, 800))
run = True
text = Text('Hello')
while run:
screen.fill('black')
for i in pygame.event.get():
if i.type == pygame.QUIT:
run = False
pygame.display.flip()
pygame.time.Clock().tick(10)
pygame.quit()
Как можно вывести self.text в стиле style?
+Я тут поэкспериментировал.
import pygame
import aspose.words as aw
import os.path
from PIL import Image
import time
class Text():
def __init__(self, text):
time_ = time.time()
self.x = 0
self.y = 0
self.style = '"color: rgb(255, 255, 0); font-size: 100px;"'
self.text = text
if not os.path.isfile('blablabla.jpg'):
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_html(f'<p style="color: rgb(255, 255, 255);"> ne loh </p>')
doc.save('blablabla.jpg')
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_html(f'<p style={self.style}> {self.text} </p>')
doc.save("for_crop.jpg")
image = Image.open('for_crop.jpg').convert('RGBA')
pixels_for_image = image.load()
x, y = image.width, image.height
mask = Image.open('blablabla.jpg')
pixels_for_mask = mask.load()
x0, y0, x1, y1 = x, y, 0, 0 # Координаты для crop
for i in range(x):
for j in range(y):
if pixels_for_image[i, j][:3] == pixels_for_mask[i, j]:
pixels_for_image[i, j] = (0, 0, 0, 0) # Очистка фона
else:
if i < x0: x0 = i
if j < y0: y0 = j
if i > x1: x1 = i
if j > y1: y1 = j
try:
image.crop((x0, y0, x1, y1)).save('label.png') # Обрезание и сохранение
except ValueError:
print("ERROR: Coordinate 'right' is less than 'left'")
self.label = pygame.surface.Surface((1, 1))
else:
self.label = pygame.image.load('label.png').convert_alpha()
def set_position(self, xy):
self.x, self.y = xy
def pos(self):
return (self.x, self.y)
def render(self):
return self.label
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((550, 800))
run = True
text = Text('Hello')
text.set_position((100, 100))
while run:
screen.fill((0, 0, 0))
screen.blit(text.render(), text.pos())
for i in pygame.event.get():
if i.type == pygame.QUIT:
run = False
pygame.display.flip()
pygame.time.Clock().tick(10)
pygame.quit()
Позади текста образуются белые пятна. Насколько я понял это проблема с прозрачным фоном. Как её можно решить?
Также выполнение __init__ занимает 2 секунды, что довольно много, к тому же есть ограничение по размеру текста. Для моих целей это сгодится, но всё ровно хотелось бы узнать более прагматичный способ.
+Проблему белых пятен я исправил заменив везде расширение jpg на bmp. Насколько я понял jpg использует "сжатие с потерями", в следствии чего не намного меняет значение каждого пикселя, из-за чего и возникают пятна.
Пускай это уже удовлетворяет все мои условия, всё же хочется знать другой способ
