Dithering in Text PIL und Truetype-Schriftarten
-
20-09-2019 - |
Frage
Betrachten Sie den folgenden Code: von PIL Import Bild, ImageDraw, ImageFont
def addText(img, lTxt):
FONT_SIZE = 10
INTERLINE_DISTANCE = FONT_SIZE + 1
font = ImageFont.truetype('arial.ttf', FONT_SIZE)
lTxtImageHeight = INTERLINE_DISTANCE * len(lTxt)
# create text image
lTxtImg = Image.new('RGBA', (img.size[1], lTxtImageHeight), 255)
lTxtImgDraw = ImageDraw.Draw(lTxtImg, )
for (i, line) in enumerate(lTxt):
lTxtImgDraw.text((5, i * INTERLINE_DISTANCE), line, font=font, fill='#000000')
# rotate text image
lTxtImg = lTxtImg.rotate(90)
# create new transparent image ret
ret = Image.new('RGBA', (img.size[0] + lTxtImageHeight, img.size[1]), 255)
# paste the image to ret
ret.paste(img, (0,0))
# paste the text to ret
ret.paste(lTxtImg, (img.size[0], 0), lTxtImg)
return ret
img = Image.open('in.png')
addText(img, ['lorem', 'ipsum', 'dolores']).save('out.png')
Hier sind die Eingangs- und die Ausgangsdateien Dies ist der Eingang
Eingang http://img16.imageshack.us/img16/8229/73936270. png
und das ist der Ausgang
Ausgang http://img94.imageshack.us/img94/531/outj. png
Wie Sie sehen können, enthält das Ausgangsbild eine Menge rötlichen Lärm um den Text. Wie kann ich diese Dithering?
beseitigenLösung
Ich schlage vor, die Zwischentextbilder zu Datei zu schreiben (der Text, dann die gedrehten Text), zu isolieren, wo die Artefakte zuerst erscheinen.
Eine andere Möglichkeit könnte sein, dass die png-Codierung eine Palette ohne Grauwerte verwendet, so dass dieser Rottöne in der Nähe zur Verfügung steht. Ich überprüfte die Codierung der Dateien auf Images aber, und es schien in Ordnung, so dass ich glaube nicht, dass dies das Problem ist.