Michael Yousef
Michael Yousef

Reputation: 634

Specific unicode character not displayed properly in python image

I am trying to create an image with some unicode characters but some of them aren't being displayed properly. You can see in this sample image:

enter image description here

The character in question I am trying to print is \u2BEA, which is a half star image. Unfortunately the output just shows me the generic missing character icon.

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

output_image = Image.new('RGB', (200,100), (0,0,0))
text = '\u2605\u2605\u2605\u2BEA\u2606'
font = ImageFont.truetype("C:\\Windows\\Fonts\\yugothb.ttc", 18)
draw = ImageDraw.Draw(output_image)
draw.text((10, 10), text, (255,255,255), font=font)
output_image.show()

Note: you may need to adjust the font location for your computer

In my sample code I'm using the Yu Gothic Bold font and not getting the correct output. I have tried using other fonts such as Arial and Calibri, which produced even worse results.

My thought process is that the character isn't part of of the font but I have yet to find a font that supports it.

Does anyone know of a free font that I can use that will display this character?

Upvotes: 0

Views: 746

Answers (2)

Xinhe Wang
Xinhe Wang

Reputation: 175

I didn't find any font that includes \u2BEA or \u2BE8 (ref: https://www.unicode.org/charts/nameslist/n_2B00.html#2BEA), but the following icons by Font Awesome might meet your needs: Star Icon (Solid) Stat Half Alt Icon (Solid) Star Icon (Regular)

In Font Awesome, f005 refers to the 'star' icon, and f5c0 refers to the 'star-half-alt' icon.

So, you can download Font Awesome Free for Desktop at https://use.fontawesome.com/releases/v5.15.3/fontawesome-free-5.15.3-desktop.zip, then draw solid \uF005\uF005\uF005\uF5C0 with 'Font Awesome 5 Free-Solid-900.otf' and a single hollow star \uF005 with 'Font Awesome 5 Free-Regular-400.otf'.

The following works properly:

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

output_image = Image.new('RGB', (200,100), (0,0,0))
solid = ImageFont.truetype('fontawesome-free-5.15.3-desktop/otfs/Font Awesome 5 Free-Solid-900.otf', 18)
regular = ImageFont.truetype('fontawesome-free-5.15.3-desktop/otfs/Font Awesome 5 Free-Regular-400.otf', 18)
draw = ImageDraw.Draw(output_image)
draw.text((10, 10), '\uF005' * 3 + '\uF5C0', (255,255,255), font=solid)
draw.text((90, 10), '\uF005', (255,255,255), font=regular)
output_image.show()

enter image description here

Upvotes: 2

Jason Yang
Jason Yang

Reputation: 13051

Unicode 'u2BEA' defined as "STAR WITH LEFT HALF BLACK", but not defined in any font file on my platform.

Maybe you can download and use following font files,

Note: Last one with large font than '\u2605' and '\u2606'.

Upvotes: 2

Related Questions