python-3.x 如何在pygame中修复阿拉伯语/波斯语文本和字体?

bq3bfh9z  于 2023-07-01  发布在  Python
关注(0)|答案(2)|浏览(131)

我在这里有一段代码:

import pygame
pygame.display.init()
pygame.font.init()

win = pygame.display.set_mode((100, 100))
font = pygame.font.Font('./arial.ttf', 10)
text = font.render('سلام', True, (255, 255, 255))

win.fill((0, 0, 0))
win.blit(text, (0, 0))
pygame.display.update()

for i in range(5):
    pygame.event.clear()
    pygame.time.delay(1000)

pygame.quit()

我的期望:سلام
标签:س‌ل‎ا‌م
怎么修?(我不在乎是否需要使用另一个库来修复它,但我必须使用pygame来处理其余代码)
我也在pygame1.9.6和2.0.0两个版本上都试过了

bxfogqkk

bxfogqkk1#

你必须使用arabic_reshaper库。

pip install arabic-reshaper

参考此https://github.com/mpcabd/python-arabic-reshaper
您还需要python-bidi

pip install python-bidi

你可以按如下方法做

import pygame
import arabic_reshaper
from bidi.algorithm import get_display
pygame.display.init()
pygame.font.init()

win = pygame.display.set_mode((100, 100))
font = pygame.font.Font('arial.ttf', 10)
text_to_be_reshaped = 'اللغة العربية رائعة'
reshaped_text = arabic_reshaper.reshape(text_to_be_reshaped)
bidi_text = get_display(reshaped_text)
print(reshaped_text)
text = font.render(bidi_text, True, (255, 255, 255))


win.fill((0, 0, 0))
win.blit(text, (0, 0))
pygame.display.update()

for i in range(5):
    pygame.event.clear()
    pygame.time.delay(1000)

pygame.quit()

输出

wlwcrazw

wlwcrazw2#

现在,通过pygame的现代分支pygame-ce(pygamecommunityedition),可以在pygame中保持字体渲染

import pygame

pygame.init()

win = pygame.display.set_mode((250, 250))
# replace with your path to Arial
font = pygame.font.Font("C:\\windows\\Fonts\\ARIAL.TTF", 80)

# New text shaping and text direction support in pygame-ce 2.1.4
font.set_script("Arab")
font.set_direction(pygame.DIRECTION_RTL)

text = font.render('سلام', True, "white")

win.fill("black")
win.blit(text, (10, 10))
pygame.display.update()

for i in range(5):
    pygame.event.clear()
    pygame.time.delay(1000)

pygame.quit()

Pygame-ce是pygame的替代品,只需pip uninstall pygamepip install pygame-ce即可获得其新功能的优势。(两者不能同时安装,因为它们都导入为pygame)

相关问题