你知道Python可以幫助向圖像中添加文本嗎?雖然Python不是圖形編輯軟件,但它能夠很好地處理圖像文件。在本文中,將在多個(gè)圖像上放置一個(gè)示例文本“ExcelPerfect”。不用手動(dòng)操作,也不用使用一些昂貴的軟件,可以使用Python輕易達(dá)到同樣的效果。這里需要使用PILLOW庫(Python
Imaging Library),使用pip命令安裝:- ImageDraw:用于創(chuàng)建新圖像的類,我們將使用它向圖片中添加文本。
img
= Image.open(r'D:\完美Excel\flower.jpg')如果使用的是Jupyter Notebook的話,可以使用內(nèi)置函數(shù)display()在notebook中顯示圖片,如下圖1所示。可以為添加到圖片中的文字選擇不同的字體。如果在Windows操作系統(tǒng)中,可以在Wondows搜索欄搜索“字體”,然后單擊“字體設(shè)置”。在“字體設(shè)置”中,可以看到許多不同的字體,也能從網(wǎng)上下載新字體供后面使用。這里想使用字體“Gill Sans”,能夠從設(shè)置中找到該字體文件的位置,如下圖2所示。有了這個(gè)字體文件,現(xiàn)在可以創(chuàng)建一個(gè)字體對(duì)象,在Python中的圖像上部繪制。在下面的代碼行中:1.第一個(gè)參數(shù)是字體文件的URL。2.第二個(gè)參數(shù)是字體大小。在這里使用的是30。font
= ImageFont.truetype(r'C:\WINDOWS\FONTS\GILSANUB.TTF',30)現(xiàn)在需要?jiǎng)?chuàng)建一個(gè)ImageDraw對(duì)象來修改該圖像。下面的draw.text()接受以下參數(shù):1.(10,10)–起始位置的(x,y)坐標(biāo)2.font–剛剛創(chuàng)建的ImageFont3.fill–文本的RGB顏色值(255表示白色,0表示黑色)draw
= ImageDraw.Draw(img)draw.text((10,10),'ExcelPerfect',
font = font, fill = (255, 255, 255))注意,ImageDraw對(duì)象實(shí)際上修改了Image對(duì)象。為了顯示更新后的圖像,可以再次使用display(img):1.確定文本的大小,這應(yīng)該動(dòng)態(tài)設(shè)置,因?yàn)槊總€(gè)圖像的大小不同。2.此外,動(dòng)態(tài)確定文本的起始(x,y)坐標(biāo)。由于圖像大小不同,坐標(biāo)會(huì)有所不同。可以通過調(diào)用size屬性來獲得圖像(即畫布)的大小。在本例中,我們的圖像寬869像素,高633像素。我們將設(shè)置文本大小,使整個(gè)文本行大約占圖像寬度的1/3。ImageFont對(duì)象的默認(rèn)字體大小為10。要獲取文本尺寸(寬度和高度)并計(jì)算比例因子,執(zhí)行以下操作:text_width,
text_height =
ImageFont.truetype(r'C:\WINDOWS\FONTS\GILSANUB.TTF').getsize(text)img
= Image.open(r'D:\完美Excel\flower.jpg')img_width,
img_height = img.sizescaler
= img_width/3/text_width在這個(gè)例子中,scaler大約是3.5,這意味著我們的字體大小將是10*3.5=35。文本寬度和高度也將相應(yīng)縮放。scale_text_font
= int(default_font_size * scaler)scale_text_width
= int(scaler * text_width)scale_text_height
= int(scaler * text_height)font
= ImageFont.truetype(r'C:\WINDOWS\FONTS\GILSANUB.TTF', size = scale_text_font)draw
= ImageDraw.Draw(img)start_x
= img_width - scale_text_width - 20start_y
= img_height - scale_text_height - 20draw.text((start_x,
start_y), text = text, font = font, fill = (255,255,255))img.save(r'D:\完美Excel\flower_w_text.jpg')要向多個(gè)圖像添加文本,讓我們將所有圖像放在同一個(gè)文件夾中。然后可以使用os.listdir()從該文件夾中獲取所有文件名,并處理每個(gè)文件。完整代碼如下:text_width,
text_height =
ImageFont.truetype(r'C:\WINDOWS\FONTS\GILSANUB.TTF').getsize(text)folder_path
= r'D:\完美Excel\images'for
f in os.listdir(folder_path):img = Image.open(rf'{folder_path}\{f}')img_width, img_height = img.sizescaler = img_width/2/text_widthscale_text_font = int(default_font_size *
scaler)scale_text_width = int(scaler * text_width)scale_text_height = int(scaler *
text_height)font =
ImageFont.truetype(r'C:\WINDOWS\FONTS\GILSANUB.TTF', size = scale_text_font)draw = ImageDraw.Draw(img)start_x = img_width - scale_text_width - 20start_y = img_height - scale_text_height -
20draw.text((start_x, start_y), text = text,
font = font, fill = (0,0,0))file_name = f.split('.')[0] + '_w_text.jpg'img.save(rf'{folder_path}\{file_name}')注:本文學(xué)習(xí)整理自pythoninoffice.com,供有興趣的朋友學(xué)習(xí)參考。
|