Drawing Multilingual Text Using Pil And Saving As 1-bit And 8-bit Bitmaps
I started with the script in this nice answer. It works just fine for 'RGB', but the 8-bit gray scale 'L' and 1-bit black/white '1' PIL image modes just appear black. What am I doi
Solution 1:
UPDATE:
This answer suggests using PIL's Image.point()
method instead of .convert()
.
The whole thing looks like this:
from PIL import Image, ImageDraw, ImageFont
import numpy as np
w_disp = 128
h_disp = 64
fontsize = 32
text = u"你好!"
imageRGB = Image.new('RGB', (w_disp, h_disp))
draw = ImageDraw.Draw(imageRGB)
font = ImageFont.truetype("/Library/Fonts/Arial Unicode.ttf", fontsize)
w, h = draw.textsize(text, font=font)
draw.text(((w_disp - w)/2, (h_disp - h)/2), text, font=font)
image8bit = imageRGB.convert("L")
imageRGB.save("NiHao! RGB.bmp")
image8bit.save("NiHao! 8bit.bmp")
imagenice_80 = image8bit.point(lambda x: 0if x < 80else1, mode='1')
imagenice_128 = image8bit.point(lambda x: 0if x < 128else1, mode='1')
imagenice_80.save("NiHao! nice 1bit 80.bmp")
imagenice_128.save("NiHao! nice 1bit 128.bmp")
ORIGINAL:
It looks like the TrueType fonts do not want to work with anything less than RGB.
You can try down-converting the images using PIL's .convert()
method.
Starting with the RGB image, this gives:
Converting to 8-bit gray scale works nicely, but starting with TrueType fonts, or any font that is based on a gray scale, a 1-bit conversion will always look rough.
For good looking 1-bit images, it is probably necessary to start with a 1-bit bitmapped Chinese font designed for digital on/off displays.
Post a Comment for "Drawing Multilingual Text Using Pil And Saving As 1-bit And 8-bit Bitmaps"