Tramage dans le texte en utilisant les polices LIP et TrueType
-
20-09-2019 - |
Question
Considérez le code suivant: de l'image d'importation PIL, 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')
Voici l'entrée et les fichiers de sortie Ceci est l'entrée
entrée http://img16.imageshack.us/img16/8229/73936270. PNG
et c'est la sortie
sortie http://img94.imageshack.us/img94/531/outj. PNG
Comme vous pouvez le voir, l'image de sortie contient beaucoup de bruit rouge autour du texte. Comment puis-je éliminer ce tramage?
La solution
Je suggère d'écrire les images de texte intermédiaires à déposer (le texte, le texte pivotée), pour isoler où les objets apparaissent d'abord.
Une autre possibilité pourrait être que le codage de .png utilise une palette sans valeurs en niveaux de gris, de sorte que les rouges sont les plus proches disponibles. J'ai vérifié l'encodage des fichiers sur ImageShack cependant, et il avait l'air correct, donc je ne pense pas que ce soit le problème.