【Python3/PIL】編輯圖片的常用方法

最近碰到要處理人物立繪的問題。。由於工作量不算小,而且重複勞動很多,就想用程序來解決,python的PIL模塊就包含了很多實用的模塊,下面展示一下個人應用的接口。

from PIL import Image

1、將一個圖片的透明部分應用到另一個圖片

emmm,這個算是有侷限性吧,應用範圍不廣,但是批量修改立繪的時候摳圖非常省力,簡略帶過一下

def getAlpha(filename):
    pic = Image.open(filename)
    r,g,b,a = pic.split()
    return a

def setAlpha(pic, alpha):
    pic.putalpha(alpha)
    return pic
getAlpha()返回文件的透明(Alpha)通道,setAlpha()將這個通道應用到另一張圖片上,注意setAlpha的圖片必須是RGBA模式(擁有透明通道)

2、等比例放縮圖片

def consResize(pic, num, mode):
    w,h = pic.size
    if mode=='w':
        h = int(num*h/w)
        w = num
        pic = pic.resize((w,h))
    if mode=='h':
        w = int(num*w/h)
        h = num
        pic = pic.resize((w,h))
    return pic
參數分別是(圖片對象,尺寸,以高/寬爲標準),應用PIL對象的resize(box)方法完成,其中box是元組(tuple)

3、給圖片加邊框(不拉伸而擴大尺寸)

def addEdge(pic,u,d,l,r):
    pw,ph = pic.size
    ow = pw + l + r
    oh = ph + u + d
    outpic = Image.new("RGBA",(ow,oh))
    outpic.paste(pic,(l,u,pw+l,ph+u),mask=pic.split()[3])
    return outpic
基本思路是,弄一張新圖片,然後把原來的圖片複製上去,這裏對透明通道的處理比較特別,用mask傳參的方式傳入透明通道,申請新圖片對象的時候用RGBA模式可以實現邊框透明

4、裁剪圖片

def cut(pic,w,h,l=0,u=0):
    pic = pic.crop((l,u,l+w,u+h))
    return pic
直接用PIL的crop方法可以實現,crop方法的四個參數圍成的矩形就是裁剪範圍,這裏稍微修改了一下參數方便使用(因爲我暫時都是從左上角開始裁剪的,就省略後兩個參數)

5、接口使用樣例

有了上面的函數就可以幹不少事情啦,本人想用程序實現的是,把一套圖背景透明化,然後按一定次序修改尺寸裁剪,由於對於每一張圖片的處理都是完全一樣的,所以就用程序代替PS實現√,下面展示一下接口使用
a = getAlpha("ori.png")
def sample():
    tp = Image.open("1.jpg")
    tp = tp.convert("RGBA")
    tp = setAlpha(tp,a)
    tp = consResize(tp,500,'h')
    tp = addEdge(tp,0,0,100,100)
    tp = cut(tp,500,200)
    tp.save("out.png")

sample()
效果:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章