頭像
實(shí)踐:
from PIL import Image,ImageDraw,ImageFont
#import sys
#reload(sys)
#sys.setdefaultencoding('utf-8')
image=Image.open('666.jpg','r')#讀入圖片
draw=ImageDraw.Draw(image)#創(chuàng)建圖片實(shí)例
fill = '#FFA500'#字體顏色
fontsize=int(min(image.width,image.height)/4) #文字尺寸
font=ImageFont.truetype('C:\Windows\Fonts\Arial.ttf',fontsize)#系統(tǒng)字體
draw.text((image.size[0]-fontsize,0),text="99+",fill=fill,font=font) #(文字距左位置,文字距頂位置),文字,文字顏色, 字體
image.save('777.jpg','jpeg')#保存圖片(圖片名稱,圖片格式)
參考示例:
這個問題需要用到PIL庫,涉及到一些非?;镜挠梅ā4a如下:
from PIL import Image,ImageFont,ImageDraw#從PIL庫導(dǎo)入所需模塊
import sys
reload(sys) #必須要reload
sys.setdefaultencoding('utf-8')#字符編碼改為utf8
headPath=r"C:\\github\\PythonExercise\\pictures\\"
#頭像圖片路徑
outputPath=r"C:\\github\\PythonExercise\\pictures\\"
#處理后輸出路徑
fontPath=r"C:\\Windows\\Fonts\\"
#字體路徑
headFile="head.jpg" #頭像文件
outFile="output.jpg" #輸出文件
#打開圖片,建立畫布
image=Image.open(headPath+headFile,'r')
draw=ImageDraw.Draw(image)
#由圖片大小確定字體大小
fontsize=min(image.size)/4
#增加文字
fontobj=ImageFont.truetype(font=fontPath+"AdobeHeitiStd-Regular.otf",size=fontsize,index=0,encoding='',filename=None)#實(shí)例字體對象
draw.text((image.size[0]-fontsize,0),text="5",fill=(255,0,0),font=fontobj,anchor=None)#用draw對象的text()方法添加文字
image.save(outputPath+outFile)#保存圖片
作為一個Python初學(xué)者,寫這段程序的時候遇到了很多錯誤,首先是路徑,“\”需要用轉(zhuǎn)義字符來轉(zhuǎn)義一下。
在實(shí)例字體對象的時候,需要加載系統(tǒng)中的字體,windows系統(tǒng)的字體文件在C:\windows\fonts目錄下面,一開始加載的時候直接用了資源管理器中顯示的名稱,并且理所當(dāng)然的認(rèn)為文件應(yīng)該是ttf文件。結(jié)果報(bào)錯
IOError: cannot open resource
肯定是找不到文件了,于是從fonts目錄拷貝了一種字體到其它文件夾,發(fā)現(xiàn)文件名稱弄錯了,而且有些字體看起來是一個文件,拷貝到其它文件會變成好幾個文件,而且文件名也跟看起來不太一樣。
為了圖省事,直接把字體文件拷貝到了工作目錄下的pictures文件夾了。
最后調(diào)用text()方法給圖片添加文字時,出現(xiàn)了喜聞樂見的編碼錯誤:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 37: ordinal not in range(128)
利用萬能的Google,解決方法如下:
import sys
reload(sys) #必須要reload
sys.setdefaultencoding('utf-8')#字符編碼改為utf8