テキストを動的に拡大縮小して、さまざまな既知の寸法の画像に配置しようとしています。テキストは透かしとして適用されます。画像の寸法に関連してテキストを拡大縮小する方法はありますか?テキストが十分に見えるようにするために、テキストが表面積全体を占めることを要求しません。 LinuxではPython Imaging Library version 1.1.7。を使用しています。
テキストのサイズと画像のサイズの比率を、たとえばサイズの1/10程度に設定できるようにしたいと思います。
私はサイズを変更するためにフォントサイズ属性を見てきましたが、それを拡大縮小するアルゴリズムを作成することができませんでした。より良い方法があるかどうか私は思っています。
これを達成する方法についてのアイデアはありますか?
ありがとう
フィットが見つかるまでフォントサイズを増やすだけです。 font.getsize()
は、レンダリングされたテキストの大きさを通知する関数です。
_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
_
これが十分に効率的でない場合は、ルート検索スキームを実装できますが、font.getsize()
関数は、他の画像編集プロセスに比べて小さなポテトだと思います。
一般に、フォントのサイズを変更しても、フォントのサイズが直線的に変化することはありません。
現在、これはソフトウェア、フォントなどに依存することがよくあります。この例は Typophile から取られ、LaTex + Computer Modernフォントを使用しています。ご覧のとおり、これは正確には線形スケーリングではありません。したがって、ノンリニアフォントスケーリングで問題が発生している場合は、どのように解決すればよいかわかりませんが、提案の1つは多分それです。