1. 程式人生 > >python手記(四):pillow(一)GIF處理,RGBA處理,Image例項屬性總結

python手記(四):pillow(一)GIF處理,RGBA處理,Image例項屬性總結

GIF儲存方法:

上次我們說到了gif動態圖片怎樣一張張將它分解,這次我們來說下怎樣把幾張單的gif組合成動態圖片。

        im.save(out, save_all = True, append_images=[im1, im2......])

基本的方法就是這樣。out是儲存名,append_images是圖片list,把想要組合的圖片全部放進去就好。

注意這裡的im是gif圖片的image物件,而list內的圖片也是image物件,但是是無要求的,不是gif格式也是可以的,海納百川嘛。

還有一點,為了美觀,在save之前,可以把list裡面的圖片size,改成和im一樣的。

不然:

                                               

他就以(0,0)只扣im大小的一塊:

有時候我們想要控制它的每張圖片切換的時間,但是save方法好像沒有這個引數,我不知道別的方法有沒有哈,如果有歡迎大牛們在下面指出哈。

這裡有個第三方庫imageio

    for i in image_list:
        frames.append(imageio.imread(i))
    imageio.mimsave(gif_name,frames,'GIF',duration = 0.5)

大家想去嘗試的,可以去try一try。frames也是類似於append_images的list,不過就不是image物件了,所以前面用imread方法換成他自己的物件。duration就是時間引數,根據喜歡修改就好,化敵意,為己用。

RGBA圖片處理:

前面我們有說,RGBA格式除了r,g,b三個bands之外多了個alpha,不透明度。也正是多了這麼一個維度,我們就有的玩了。

為了說明,我這裡找了兩張rgba格式的圖片:

我們先看一種玩法,Image.blend(im1,im2,α)。

        def blend(im1,im2):#alpha 0-1 0位第一張圖 1為第二張圖 大小必須相同 混合
            Image.blend(im1,im2,0.5).save('blend.png')

引數im1和im2就不用多說了,就是兩個image物件,我們來說說α,他是個0到1的數值,簡單理解,他是im1和im2所佔圖片的重要程度,blend是混合的意思嘛。如果阿爾法為0,那im1佔主導優勢,就當是主場,執行的結果和im1沒什麼區別,如果為1,那就恰恰相反了。我這裡取了0.5,取箇中間,管他是捭闔之術,還是中庸之道。總之:

效果嘛,就不說了,自行欣賞.......告辭。

下一種,Image.alpha_composite(im1, im2),複合。這個理解起來相對簡單,不捭闔,也不中庸,我們厚黑好了。haaaa,開玩笑,望文生義就好。

就是把im2複合到im1上,僅此而已(注意順序不能亂哦,是im2 over im1):

直接上圖吧,這樣好理解,如果你把順序兌換,綠球球的黑背景就會完全覆蓋住粉花花,那也就和沒處理一樣的。

最後總結一下Image物件的屬性,方便檢視。

im.filename() 望文生義,就是返回圖片名字

im.format() 

im.mode()

im.size() 這三個前面有提,圖片的格式,型別,大小

im.width()

im.height() 這兩個看不懂的,麻煩去學小學英語

im.palette() palette(怕了他了)調色盤,請忽略括號內容,這個屬性一般沒啥用,mode為P的圖片才有值,一般都是None

im.info() 這是個資料字典,證張圖片的詳細資訊,dict型別。如果你直接輸出,emmmm,怎麼說呢,有點像你玩爬蟲,open完一個url不處理,然後直接print(text)出來,幾秒鐘好開始問候計算機的祖宗,為什麼那麼慢,垃圾!

ok,鞠躬下臺。我知道你們不會拿錢砸死我的。