国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

利用Python自帶PIL庫擴展圖片大小給圖片加文字描述的方法示例

2020-01-04 17:08:26
字體:
供稿:網(wǎng)友

前言

最近的一個項目中需要在圖片上添加文字,使用了OpenCV,結(jié)果發(fā)現(xiàn)利用opencv給圖像添加文字有局限。可利用的字體類型比較少,需要安裝Freetype擴展,比較復(fù)雜。而且不能用putText函數(shù)輸出中文,否則就會出現(xiàn)亂碼的情況。只好選擇使用Python PIL函數(shù)庫對照片進行處理,利用Python自帶的PIL庫擴展圖片大小給圖片加上文字描述,大多都是庫函數(shù)調(diào)用,只是給定圖片寬度后計算文字所需行數(shù)的代碼需要寫。 代碼比較丑,but it works.

代碼示例

#!/usr/bin/env python/266495.html">python/57690.html">python3from PIL import Image, ImageDraw, ImageFontimport mathtext="盡管曾作為皇家獵場而存在,意大利大帕拉迪索國家公園一直保留著其野性的一面。畫面里的赤狐靜靜地匍匐在秋草叢中等待時機,它的身軀與自然融為一體。所有狐貍都是機會主義者,生活在大帕拉迪索的赤狐也不例外;如果有可能,無論是魚類還是野兔,即便是人類野餐留下的殘羹冷炙,它們也不介意吃個一干二凈。"def make_text_image(width, white, text, save_path, mode = "rgb"): """ 生成一個文字圖形, white=1,表示白底黑字,否則為黑底白字 """ # 字體可能要改 # linux查看支持的漢字字體 # fc-list :lang=zh ft = ImageFont.truetype("DroidSansFallbackFull.ttf", 15) w, h = ft.getsize(text) # 計算要幾行 lines = math.ceil(w / width) + 1 height = h * lines # 一個漢字的寬度 one_zh_width, h = ft.getsize("中") if len(mode) == 1: # L, 1  background = (255)  color = (0) if len(mode) == 3: # RGB  background = (255, 255, 255)  color = (0,0,0) if len(mode) == 4: # RGBA, CMYK  background = (255, 255, 255, 255)  color = (0,0,0,0) newImage = Image.new(mode, (width, height), background if white else color) draw = ImageDraw.Draw(newImage) # 分割行 text = text + " " #處理最后少一個字問題 text_list = [] start = 0 end = len(text) - 1 while start < end:  for n in range(end):   try_text = text[start:start+n]   w,h = ft.getsize(try_text)   if w + 2*one_zh_width > width:    break  text_list.append(try_text[0:-1])  start = start + n - 1; # print(text_list) i = 0 for t in text_list:   draw.text((one_zh_width, i * h), t, color if white else background, font=ft)  i = i + 1 newImage.save(save_path);def resize_canvas(org_image="aa.jpg", add_image="222.jpg", new_image_path="save2.jpg"): org_im = Image.open(org_image) org_width, org_height = org_im.size mode = org_im.mode make_text_image(org_width, 0, text, "222.jpg", mode) add_im = Image.open(add_image) add_width, add_height = add_im.size mode = org_im.mode newImage = Image.new(mode, (org_width, org_height + add_height)) newImage.paste(org_im, (0, 0, org_width, org_height)) newImage.paste(add_im, (0, org_height, add_width, add_height + org_height)) newImage.save(new_image_path)resize_canvas()

原圖

python,pil,圖片大小,添加文字,文字

改之后的圖

python,pil,圖片大小,添加文字,文字

總結(jié)

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。

參考資料:

  • PIL庫幫助文檔http://pillow.readthedocs.io/en/latest/reference/ImageFont.html?highlight=getsize
  • 加水印的學(xué)習(xí) https://wanglu.info/1273.html
  • 擴展圖片大小的學(xué)習(xí) https://ask.helplib.com/1334235
  • 計算字符串像素的學(xué)習(xí) http://blog.csdn.net/icamera0/article/details/50762050
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 漳平市| 泸溪县| 台湾省| 库尔勒市| 永春县| 叙永县| 武穴市| 台北市| 宣化县| 河间市| 陕西省| 靖西县| 天峻县| 郸城县| 柘城县| 平舆县| 龙南县| 青龙| 沅陵县| 恭城| 嵊泗县| 广灵县| 潍坊市| 额敏县| 南平市| 南岸区| 武威市| 阿拉善左旗| 朝阳县| 安义县| 盐城市| 大方县| 渝北区| 唐河县| 吴桥县| 新蔡县| 临湘市| 根河市| 开化县| 大同县| 玉门市|