天天看點

Python3圖檔中豎排文字

環境及相關問題請參考另一篇文章:Python3使用PIL在圖檔中寫文字支援中文:https://mp.csdn.net/postedit/83855415

話不多說,請看效果圖:

Python3圖檔中豎排文字

思路:

豎排文字實際按照一文字一個文字的寫入,每次寫入一個字時計算文字所在的坐标位置即可

具體實作請看代碼:

#功能:豎排文字 通過模闆圖檔 寫入文字到指定位置,并分别儲存成新的圖檔
#功能說明:根據","換行(也可以根據"\n"換行)
#環境:PyDev 6.5.0   Python3.5.2
#說明:PIL僅支援到python2.7,python3要使用PIL需安裝pip3 install Pillow
#python2與python3共存配置方法https://www.cnblogs.com/thunderLL/p/6643022.html

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

#初始化字元串
strs = "往後餘生,風雪是你,平淡是你,清貧也是你\n榮華是你,心底溫柔是你,目光所緻,也是你" #"包長榮,董亞靜;包良榮,王林香;李發甯,靳海燕;王秉安;魏耀鑫"
#模闆圖檔
imageFile = "F:\\family\\模闆圖檔.jpg"#"F:\\family\\請柬模闆.JPG"
#新檔案儲存路徑
file_save_dir = "F:\\family\\image\\"

#初始化參數
x = 300   #橫坐标(左右)
y = 20   #縱坐标(上下)
word_size = 50 #文字大小
word_css  = "C:\\Windows\\Fonts\\STXINGKA.TTF" #字型檔案   行楷
#STXINGKA.TTF華文行楷   simkai.ttf 楷體  SIMLI.TTF隸書  minijianhuangcao.ttf  迷你狂草    kongxincaoti.ttf空心草

#設定字型,如果沒有,也可以不設定
font = ImageFont.truetype(word_css,word_size)

#分割得到數組
im1=Image.open(imageFile) #打開圖檔
draw = ImageDraw.Draw(im1)
print(font.getsize(strs))
print("豎向文字")
#
im1=Image.open(imageFile)
draw = ImageDraw.Draw(im1)
#draw.text((x, y),s.replace(",","\n"),(r,g,b),font=font) #設定位置坐标 文字 顔色 字型
right = 0   #往右位移量
down = 0    #往下位移量
w = 500     #文字寬度(預設值)
h = 500     #文字高度(預設值)
row_hight = 0 #行高設定(文字行距)
word_dir = 0; #文字間距
#一個一個寫入文字
print(strs)
for k,s2 in enumerate(strs):            
    if k == 0:
        w,h = font.getsize(s2)   #擷取第一個文字的寬和高
    if s2 == "," or s2 == "\n" :  #換行識别
        right = right + w  + row_hight
        down = 0
        continue
    else :
        down = down+h + word_dir          
    print("序号-值",k,s2)
    print("寬-高",w,h)
    print("位移",right,down)
    print("坐标",x+right, y+down)
    draw.text((x+right, y+down),s2,(255,255,0),font=font) #設定位置坐标 文字 顔色 字型
#定義檔案名 數字需要用str強轉
new_filename = file_save_dir +  strs.replace(",","-").replace("\n","-") + ".jpg"
im1.save(new_filename) 
del draw #删除畫筆
im1.close()