7

を使用して、その中にテキストを描画し、ここに私のコードの一部だし、それが少し難読化されています:私は長方形とその中のテキストを描画したい長方形とPIL

from PIL import Image 
from PIL import ImageFont 
from PIL import ImageDraw 
from PIL import ImageEnhance 

    source_img = Image.open(file_name).convert("RGB") 

    img1 = Image.new("RGBA", img.size, (0,0,0,0)) 
    draw1 = ImageDraw.Draw(watermark, "RGBA") 
    draw1.rectangle(((0, 00), (100, 100)), fill="black") 
    img_rectangle = Image.composite(img1, source_img, img1) 

    draw2 = ImageDraw.Draw(img1, "RGBA") 
    draw2.text((20, 70), "something123", font=ImageFont.truetype("font_path123")) 

    Image.composite(img1, source_img, img1).save(out_file, "JPEG") 

これは、それらの両方を描くが、それらは別々です:テキストは長方形の下にあります。私は矩形の内側にテキストを描きたいのですが。 どうすればいいですか?私はとする必要がありますか?

+1

画像1枚でこれを行うことはできませんか? – furas

+0

@furas、できますか? – ako25

答えて

12

あなたは、ボタンの大きさと空の画像を作成し、その上にテキストを入れて、後でsource_imgにこの画像を置くことができcomposite()

from PIL import Image, ImageFont, ImageDraw, ImageEnhance 

source_img = Image.open(file_name).convert("RGBA") 

draw = ImageDraw.Draw(source_img) 
draw.rectangle(((0, 00), (100, 100)), fill="black") 
draw.text((20, 70), "something123", font=ImageFont.truetype("font_path123")) 

source_img.save(out_file, "JPEG") 

せずにそれを行うことができます。このように長いテキストはボタンのサイズにカットされます。

from PIL import Image, ImageFont, ImageDraw, ImageEnhance 

source_img = Image.open("source.jpg").convert("RGBA") 

# create image with size (100,100) and black background 
button_img = Image.new('RGBA', (100,100), "black") 

# put text on image 
button_draw = ImageDraw.Draw(button_img) 
button_draw.text((20, 70), "very loooooooooooooooooong text", font=ImageFont.truetype("arial")) 

# put button on source image in position (0, 0) 
source_img.paste(button_img, (0, 0)) 

# save in new file 
source_img.save("output.jpg", "JPEG") 

EDIT:私は、テキストのサイズを取得し、正しいサイズのボタンを作成するImageFont.getsize(text)を使用しています。

from PIL import Image, ImageFont, ImageDraw, ImageEnhance 

source_img = Image.open("input.jpg").convert("RGBA") 


font = ImageFont.truetype("arial") 

text = "very loooooooooooooooooong text" 

# get text size 
text_size = font.getsize(text) 

# set button size + 10px margins 
button_size = (text_size[0]+20, text_size[1]+20) 

# create image with correct size and black background 
button_img = Image.new('RGBA', button_size, "black") 

# put text on button with 10px margins 
button_draw = ImageDraw.Draw(button_img) 
button_draw.text((10, 10), text, font=font) 

# put button on source image in position (0, 0) 
source_img.paste(button_img, (0, 0)) 

# save in new file 
source_img.save("output.jpg", "JPEG") 
+0

矩形内にテキストを描画しません。 – ako25

+0

それは私のために働く - 私は長方形の中にテキストを取得します。たぶんあなたは間違った画像をチェックします - すべての古い画像を削除し、再度実行してください。 – furas

+0

いいえ、画像は正しいです。 (20,70)は四角形の内側の座標であり、画像全体の中の座標ではないことをどのように知っていますか? – ako25

関連する問題