You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.5 KiB

from PIL import ImageFont, Image, ImageDraw
import re
font = ImageFont.truetype("wqy-zenhei.ttc", 24, 1)
emfont = ImageFont.truetype("NotoEmoji-Regular.ttf", 24, 0)
except OSError:
print("Please download these fonts to the current dir:\n"
def text_to_im(text="紧密团结在鱼塔同志周围"):
emoji = re.compile("^[" u"\U0001F600-\U0001F64F" u"\U0001F300-\U0001F5FF" u"\U0001F680-\U0001F6FF" u"\U0001F1E0-\U0001F1FF" "]$", flags=re.UNICODE)
brush_location = [0]
def draw_single_char(ch, draw=None):
m = emoji.match(ch)
myfont = emfont if m else font
width = myfont.getsize(ch)[0]
if draw:
draw.text((brush_location[0], -2 if m else 0), ch, fill="black", font=myfont, spacing=0)
brush_location[0] += width
return width
def max_height(text):
return max(*[font.getsize(ch)[1] for ch in text], *[emfont.getsize(ch)[1] for ch in text])
width, height = sum(draw_single_char(ch) for ch in text), max_height(text)
im ='1', (width, height), color="white")
draw = ImageDraw.Draw(im)
for ch in text:
draw_single_char(ch, draw)
return im