Je ne pouvais pas faire défiler le japonais avec l'API officielle de SenseHAT, j'ai donc essayé de le gérer en utilisant PIL de la police Python et Misaki. Il s'agit d'une image dans laquelle le texte est transformé en une seule image et découpé dans l'ordre du bord à une image 8 * 8.
python
# -*- encoding:utf8 -*-
import unicodedata
import time
import sys
from PIL import Image, ImageDraw, ImageFont
from sense_hat import SenseHat
#Obtenez le nombre total d'octets dans une chaîne
def count_byte(s):
n = 0
for c in s:
wide_chars = u"WFA"
eaw = unicodedata.east_asian_width(c)
if wide_chars.find(eaw) > -1:
n += 2
else:
n += 1
return n
#Affichage de défilement sur Sense HAT
def show_scroll_string(
disp_str, fore_color = "#ffffff", back_color = "#000000", interval = 0.1):
'''
disp_str =Chaîne de caractères à afficher
fore_color =Couleur du texte (facultatif)
back_color =Couleur d'arrière-plan (facultatif)
interval =Intervalle d'affichage du défilement (facultatif)
'''
matrix_size = 8
img_width = (count_byte(disp_str) * 4) + (matrix_size * 2)
sense = SenseHat()
font = ImageFont.truetype("/misaki_gothic.ttf", #Spécifiez le chemin de la police
8, encoding="unic")
img_moto = Image.new("RGB", (img_width, matrix_size), back_color)
draw = ImageDraw.Draw(img_moto)
draw.text((matrix_size, 1), disp_str, font = font, fill = fore_color)
img_moto.save("./img.png ", "PNG")
for num in range(0, img_width - matrix_size):
img = img_moto.crop((num, 0, matrix_size + num, matrix_size))
img.save("./img_.png ", "PNG")
sense.load_image("./img_.png ")
time.sleep(interval)
sense.clear()
# main
show_scroll_string(u"Chaîne de caractères Chaîne de caractères Chaîne de caractères.", fore_color="#ffff00", interval = 0.07)
Si vous spécifiez le chemin de la police et placez la chaîne de caractères de sortie dans l'argument de show_scroll_string et appelez-la, elle doit être défilée.
Si vous souhaitez l'exécuter et l'utiliser tel quel, veuillez le faire à vos propres risques.
Sites référencés, etc.
Recommended Posts