女朋友老是吵著要修圖,作為程式設計師,只會敲代碼,不會ps啊,真是令人頭大。
程式設計師是這麼容易被難到的嗎?肯定不會!最近發現了程式設計師的p圖神器——python。
python也可以修圖嗎?是滴!下面就帶你進入python的修圖世界。(以下面這張照片為例。)
圖片來源於pixabay
庫名稱:Pillow
Pillow是Python中最流行的圖像預處理函數庫,支持一系列簡單或複雜的圖像處理功能,也是其他Python庫(如SciPy和Matplotlib)能夠處理圖像的基礎。
01
安裝與導入
直接在cmd中使用pip方法安裝pillow庫:
pipinstallPillow
需要注意的是,其在Python2中的庫名為PIL,而非Pillow。
導入:
fromPILimportImage
02
基本操作
01 打開圖片使用Image模塊中的open函數打開一張圖片:
im= Image.open('1.jpg')
02 查看格式
format屬性定義了圖像的格式,如果圖像不是從文件打開的,那麼該屬性值為None:
im.format
輸出:'JPEG'
03 查看大小
size屬性是一個tuple,表示圖像的寬和高(單位為像素):
im.size
輸出:(960, 640)
04 查看模式
mode屬性為表示圖像的模式,模式屬性如下:
im.mode
輸出:'RGB'
05 查看文件名
im.filename
輸出:'1.jpg'
06 查看位數
im.bits
輸出:8
07 顯示圖片
標準版本的show()方法不是很有效率,因為它先將圖像保存為一個臨時文件,然後使用查看器進行顯示。
im.show()
08 保存圖片
im.save('2.jpg')
03
圖片處理
01 圖片裁剪
使用open方法讀取圖片,然後查看它的size,size的輸出是(960, 640),也就是圖片的寬度和高度。
之後我們調用crop方法來對圖片進行裁剪,crop需要給定一個box參數,box是一個四元組,元組中元素的順序是需要裁剪得到的圖片在原圖中的左、上、右、下坐標,即(left, upper, right, lower)。
然後,我們使用save方法保存裁剪得到的圖片。
from PIL import Image
img = Image.open("1.jpg")
print(img.size)
cropped = img.crop((200,,600,400)) # (left, upper,right, lower)
cropped.save("A.jpg")
裁剪後的圖片:
02 複製粘貼
Image的copy函數如其名會產生一個原圖像的副本,在這個副本上的任何操作不會影響到原圖像。
paste()方法用於將一個圖像粘貼(覆蓋)在另一個圖像上面。誰調用它,他就在該Image對象上直接作修改。
cropedIm =im.crop((400,,800,800))
im.paste(cropedIm, (,))
im.show()
im.save("B.jpg")
以裁剪後的圖像寬度和高度為間隔,在循環內不斷粘貼在副本中,會發生什麼呢?
cropedIm =im.crop((300,50,500,350))
crop_width, crop_height = cropedIm.size
width, height =im.size
copyIm =im.copy()
forleftinrange(, width, crop_width):
fortop inrange(, height, crop_height):
copyIm.paste(cropedIm, (left, top))
copyIm.save("C.jpg")
有一點像證件照的效果:
03 圖片縮放
resize方法返回指定寬高度的新Image對象,接受一個含有寬高的元組作為參數。寬高的值得是整數。
width, height =im.size
resizedIm =im.resize((width, height+(960-640)))
resizedIm.save("D.jpg")
人也變瘦了,可以看到resize不是等比例縮放的,不過女生應該蠻喜歡變瘦的吧。
04 圖片旋轉
圖像可以用rotate()方法旋轉,該方法返迴旋轉後的新Image對象,並保持原始Image對象不變。rotate()的參數是一個整數或浮點數。
im= Image.open("1.jpg")
im.rotate(90).save("E.jpg")
im.rotate(270).save("F.jpg")
im.rotate(180).save("G.jpg")
im.rotate(20).save("H.jpg")
由上到下,分別是旋轉了90°,180°, 270°、普通的20°。
當圖像旋轉90或270度時,寬度和高度會變化。在windows上, 會使用黑色的背景來填補旋轉造成的縫隙。
05 畫面增強
PIL模塊中有一個叫做ImageEnhance的類,該類專門用於圖像的增強處理,不僅可以增強(或減弱)圖像的亮度、對比度、色度,還可以用於增強圖像的銳度。
5.1 亮度增強Brightness:
enh_bri = ImageEnhance.Brightness(im)
brightness =1.5
image_brightened = enh_bri.enhance(brightness)
image_brightened.show()
5.2 對比度增強Contrast:
enh_con = ImageEnhance.Contrast(im)
contrast =1.5
image_contrasted = enh_con.enhance(contrast)
image_contrasted.show()
5.3 色度增強Color:
enh_col = ImageEnhance.Color(im)
color =1.5
image_colored = enh_col.enhance(color)
image_colored.show()
5.4 銳度增強Sharpness:
enh_sha = ImageEnhance.Sharpness(im)
sharpness =6.0
image_sharped = enh_sha.enhance(sharpness)
image_sharped.show()
調節亮度、對比度、色彩、銳度等,不就等於給照片加了濾鏡嗎?而且效果還不錯!
06 圖像過濾
在圖像處理中,經常需要對圖像進行平滑、銳化、邊界增強等濾波處理。
在使用PIL圖像處理庫時,我們通過Image類中的成員函數filter()來調用濾波函數對圖像進行濾波,而濾波函數則通過ImageFilter類來定義的。
6.1 高斯模糊
im.filter(ImageFilter.GaussianBlur).save("J.jpg")
6.2 浮雕
im.filter(ImageFilter.EMBOSS).save("L.jpg")
6.3 輪廓
im.filter(ImageFilter.CONTOUR).save("M.jpg")
除此之外,pillow中還提供以下濾波可供使用:
# 銳化
im.filter(ImageFilter.SHARPEN).save('.jpg')
# 平滑
im.filter(ImageFilter.SMOOTH).save('.jpg')
# 細節
im.filter(ImageFilter.DETAIL).save('.jpg')
# 普通模糊
im.filter(ImageFilter.BLUR).save('.jpg')
# 邊緣增強
im.filter(ImageFilter.EDGE_ENHANCE).save('.jpg')
# 找到邊緣
im.filter(ImageFilter.FIND_EDGES).save('.jpg')
關於python中pillow庫的照片處理到這兒就差不多了,雖然使用python進行照片處理跟ps還是有一定的差別,但基本操作沒有問題,四捨五入我們還是會修圖的!
- DataCastle -