人生不易且無趣,一起找點樂子吧。歡迎評論,和文章無關的也可以。
咳咳(清下嗓子,準備發話),自娛自樂型人格分裂患者。haaa。
前面我們簡單看了pillow的基礎Image類。現在我們成功的過度了,進入下個地圖,刷怪,升級。反正都是一起學習嘛,我能力就這麼點,我是不行了,您湊活喫。
您可能需要一張牀,一面牆,一個冰箱。哈,扯回來,進入主題。
這次我們來看ImageChops類,chops,頜,顎,排;的意思。我也不曉得,爲啥要起介個名字。英語水平差,領會不到其中的含義。但還好,怪醜不醜,不影響操作,該打還打。
(
後記:
)
爲了便於演示,先鋪墊一下。
首先是用到的圖片素材:
第二張圖不那麼的和諧,無妨無妨,別問我爲啥總是這幾張圖。因爲......我重情。我把好看的圖片都測試完了,你們玩的時候就沒新意了,ok?(爲自己的懶惰找藉口完畢)
第二項,我寫個main函數,然後調用一個個函數,來簡單說明這個類吧。
if __name__ == '__main__':
im1 = Image.open('1.jpg')
im2 = Image.open('3.jpg')
add(im2, im1)#這裏調用函數
im1.close()
im2.close()
鋪墊完成,先說下這個類的核心思想,這個類對圖片進行了一些運算操作,嗯,怎麼理解呢,我是這樣認爲的。我們知道圖片由一個個像素點構成,每個像素點又都有像素值,我們一個個像素點去處理,修改他們的像素值,最後再保存處理完的圖片,just so so。還有一點,此類方法的處理對象一般爲im.mode是L或者RGB的圖片,其他類型可能出錯。
每個方法的後面我會寫出具體的運算,當然這些,官網上也都有,大家可以自行去查看。
此類會對你的視覺造成極大的震撼,色盲,色弱,色狼,心臟病患者避讓。(好像除了最後一種病人,其他病狀都對視覺刺激免疫啊......)
ImageChops.add(im1,im2,scale=.0,offset=0),加運算
def add(im1,im2):
im3 = ImageChops.add(im1,im2,scale=2.0,offset=0)#scale=1.0 offset=0
im3.save('add.jpg')
im3.close()
此方法有四個參數,前兩個無需多談,兩個待處理Image對象,scale,等級,規模。offset,抵消偏移量。不扯這些名詞了。
其實做的就是這個運算:
out = ((image1 + image2) / scale + offset)
這裏的scale默認是1.0,offset是零。我分別用scale爲1.0和2.0做了測試,看下效果:
(我覺得好看,你覺得呢?嗯,真香~~)
ImageChops.add_modulo(im1, im2)
還有個與之類似的加運算:
out = ((image1 + image2) % MAX),max是最大255。
def add_modulo(im1, im2):
im3 = ImageChops.add_modulo(im1, im2)
im3.save('add_modulo.jpg')
im3.close()
就像開頭說的這個類就是對像素值做了運算操作,其他的方法,我就直接寫完代碼,就展示結果了,必要說的地方再談下。
看結果:
這個比較炫酷是吧。(藍色描邊,skr~~ skr~~~)
ImageChops.darker(im1, im2)
這個方法更酷,我是說名字。我起名爲暗黑者,算了不胡扯了,這個方法原理上很簡單,他是將兩張圖片一個一個像素點比較,留下那個像素深度大的點,最後產生一個新的圖片。
def darker(im1, im2):#一個個像素點去比較 返回深度高的點
im3 = ImageChops.darker(im1, im2)
im3.save('darker.jpg')
im3.close()
看結果:
可怕。
ImageChops.lighter(im1, im2)
相對應的,“光明者”!就是和darker相對而已,兩兩比較,留下深度值小的。
def lighter(im1, im2):
im3 = ImageChops.lighter(im1, im2)
im3.save('lighter.jpg')
im3.close()
看結果:
淡淡芒果清香味。(這都是說了個啥!!!)
ImageChops.difference(im1, im2)
所做運算:
out = abs(image1 - image2)
兩像素點的絕對差值。
def difference(im1, im2):
im3 = ImageChops.difference(im1, im2)
im3.save('difference.jpg')
im3.close()
看結果:
恐怖懸疑吧這是。(煙火裏的塵埃)
ImageChops.invert(im1)
invert,反。很好理解,其實就是取反了。(以下內容可能爲胡扯,請將神獸“理性”召出,自行辨別真僞)我們知道,光視覺三原色(red,green,blue)和水彩染料的三原色(red,yellow,blue)是不同的。但是都有個補色的存在,比如最常知道的黑白等。
這裏的取反,也能說成是顏色的取補吧,自行理解哈。(你的神獸說什麼?別聽他瞎BB?But I can.沒人廢話,沒多複雜。【蹭熱度】)
def invert(im1):
im3 = ImageChops.invert(im1)
im3.save('inert.jpg')
im3.close()
看結果:
靈異事件!(好喜歡這張圖~~~)
你知道熊貓黑白顛倒是啥樣子嗎?
差不多就下面這個樣子:
emmmmmmm
ImageChops.logical_or(im1,im2)
邏輯或運算:
out = ((image1 or image2) % MAX)
我這裏沒辦法做測試了,大家去找圖片吧,我這幾張圖片不符合處理的類型
還有個與之對應的邏輯與運算。
ImageChops.logical_and(im1,im2),一樣的。
ImageChops.multiply(im1,im2)
這個應該就直接看懂了,乘法:
out = image1 * image2 / MAX
def multiply(im1, im2):
im3 = ImageChops.multiply(im1,im2)
im3.save('multiply.jpg')
im3.close()
看效果:
漸漸有了抵抗力。(還記得我說有抵抗力的人羣都是什麼病嗎。【手動笑臉】)
ImageChops.offset(im, x, y)
def offset(im):
im3 = ImageChops.offset(im, 300, 200)
im3.save('offset.jpg')
im3.close()
這個方法用於切割圖片,然後再對角互換,啥意思?
看結果:
是不是秒懂,參數x,y就是切割點,也可以只寫一個參數,如果y不給,默認與x相同。
ImageChops.screen(im1, im2)
所做運算:
out = MAX - ((MAX - image1) * (MAX - image2) / MAX)
def screen(im1, im2):
im3 = ImageChops.screen(im1, im2)
im3.save('screen.jpg')
im3.close()
看效果:
(需要一副鈦合金眼鏡!!!)
ImageChops.subtract(im1, im2, scale=1.0, offset=0),減運算
所做運算:
out = ((image1 - image2) / scale + offset)
def subtract(im1, im2):
im3 = ImageChops.subtract(im1, im2, scale=1.0, offset=0)
im3.save('substract.jpg')
im3.close()
和開頭add一樣,看效果:
驚悚再次襲來。(青青草原......還好不是帽子的顏色)
最後一個,和add一樣的subtract。
ImageChops.subtract_modulo(im1, im2)
所做運算:
out = ((image1 - image2) % MAX)
def subtract_modulo(im1, im2):
im3 = ImageChops.subtract_modulo(im1, im2)
im3.save('subtract_modulo.jpg')
im3.close()
看效果:
夜空!!!(極速五釐米嗎?爲什麼我突然想到這個,這種畫風,像早期電視卡的時候,劃盤出現的畫面。)
ok,介紹完了,其實我還蠻想試試把《星月夜》圖片取補的,白色的夜空是什麼樣的。白雲取補,黑色的雲又是什麼樣的。(烏雲啊,蠢~~~~)
好了,先到這裏吧。我要鞠躬下臺嘍。
後記:
括號內的內容爲第二次審看添加內容,旨在您閱讀時引起極大舒適。That‘s all.