J'essaie de mettre à l'échelle dynamiquement du texte à placer sur des images de dimensions variables mais connues. Le texte sera appliqué en filigrane. Existe-t-il un moyen de mettre le texte à l'échelle par rapport aux dimensions de l'image? Je n'exige pas que le texte occupe toute la surface, juste pour être suffisamment visible pour être facilement identifiable et difficile à supprimer. J'utilise Python Imaging Library version 1.1.7. Sous Linux.
J'aimerais pouvoir définir le rapport entre la taille du texte et les dimensions de l'image, disons comme 1/10 de la taille ou quelque chose.
J'ai regardé l'attribut de taille de police pour changer la taille mais je n'ai pas eu de chance de créer un algorithme pour le mettre à l'échelle. Je me demande s'il y a une meilleure façon.
Des idées sur la façon dont je pourrais y parvenir?
Merci
Vous pouvez simplement augmenter la taille de la police jusqu'à ce que vous trouviez un ajustement. font.getsize()
est la fonction qui vous indique la taille du texte rendu.
import ImageFont, ImageDraw, Image
image = Image.open('hsvwheel.png')
draw = ImageDraw.Draw(image)
txt = "Hello World"
fontsize = 1 # starting font size
# portion of image width you want text width to be
img_fraction = 0.50
font = ImageFont.truetype("arial.ttf", fontsize)
while font.getsize(txt)[0] < img_fraction*image.size[0]:
# iterate until the text size is just larger than the criteria
fontsize += 1
font = ImageFont.truetype("arial.ttf", fontsize)
# optionally de-increment to be sure it is less than criteria
fontsize -= 1
font = ImageFont.truetype("arial.ttf", fontsize)
print 'final font size',fontsize
draw.text((10, 25), txt, font=font) # put the text on the image
image.save('hsvwheel_txt.png') # save it
Si ce n'est pas assez efficace pour vous, vous pouvez implémenter un schéma de recherche de racine, mais je suppose que la fonction font.getsize()
est de petites pommes de terre par rapport au reste de vos processus d'édition d'image.
En général, lorsque vous changez la taille de la police, cela ne va pas être un changement linéaire de la taille de la police.
Maintenant, cela dépend souvent du logiciel, des polices, etc ... Cet exemple est tiré de Typophile et utilise la police LaTex + Computer Modern. Comme vous pouvez le voir, ce n'est pas exactement une mise à l'échelle linéaire. Donc, si vous rencontrez des problèmes avec la mise à l'échelle des polices non linéaire, je ne sais pas comment le résoudre, mais une suggestion est peut-être de le faire.