一行代碼搞定的事還用個錘子的 PS 啊
本文轉(zhuǎn)載自微信公眾號「Python技術(shù)」,作者派森醬 。轉(zhuǎn)載本文請聯(lián)系Python技術(shù)公眾號。
在我們的日常生活和工作中有不少場景需要簡單處下理圖片,很多人都是依賴 PS、美圖秀秀等各種圖像處理工具,殊不知在你打開軟件的一瞬間 Python 就已經(jīng)將圖片處理完了。聽起來是不是很神奇,正所謂是 Python 在手,啥也不愁。
Python 屆處理圖片最強的庫是 PIL(Python Image Library),但由于該庫只支持 2.x 版本,于是有一批樂于助人的程序員在此基礎(chǔ)上做了擴展,出了一個兼容 3.x 的版本也就是 Pillow,因此,我們今天要用的庫就是 Pillow。
安裝
老規(guī)矩,先通過 pip 安裝到本地機器。
- pip install Pillow
基本操作
打開圖像
可以通過 Image 類來操控圖片,比如打開一張圖片并獲取其基本信息。
- from PIL import Image, ImageFilter, ImageEnhance, ImageDraw, ImageFont
- img = Image.open('cat.jpg')
- print(F'圖片大小為 {img.format}, 格式為 {img.size}, 模式為{img.mode}')
- # 圖片大小為 JPEG, 格式為 (3458, 3456), 模式為 RGB
轉(zhuǎn)換格式
如果給目標(biāo)圖片轉(zhuǎn)換格式,可以通過 save 函數(shù)來實現(xiàn)。
- img.save("cat.jpg ")
之后你就會在同目錄下得到一張擴展名為 png 的圖片了。
展示圖片
直接通過 show 函數(shù)來顯示圖片。
- img.show()
剪裁
使用 crop 函數(shù)傳入一個四元祖坐標(biāo)來剪裁圖片。
- point = (1500, 800, 3000, 2300)
- img_crop = img.crop(point)
- img_crop.show()
合并
通過 paste 函數(shù)傳入合并的圖像和坐標(biāo)來實現(xiàn)兩張圖片的合并,那如果要合并多張圖片呢,當(dāng)然是直接調(diào)用多次就好了呀。
- img.paste(img_crop, (0, 0), None)
- img.show(
縮略圖
有時候圖像過大,這時候就顯示出縮略圖的必要了,可以通過 thumbnail 函數(shù)傳入 size 來實現(xiàn)圖片的縮小。
- thumb_size = (345, 345)
- img.thumbnail(thumb_size)
- img.show()
旋轉(zhuǎn)
使用 transpose 函數(shù)傳入旋轉(zhuǎn)角度來實現(xiàn)圖片的翻轉(zhuǎn)。
可以傳入的參數(shù)有以下幾種:
- Image.ROTATE_90:逆時針旋轉(zhuǎn) 90°
- Image.ROTATE_180:逆時針旋轉(zhuǎn) 180°
- Image.ROTATE_270:逆時針旋轉(zhuǎn) 270°
- Image.FLIP_LEFT_RIGHT:左右翻轉(zhuǎn)
- Image.FLIP_TOP_BOTTOM:上下翻轉(zhuǎn)
- img_rotate = img.transpose(Image.ROTATE_90)
- img_rotate.show()
濾鏡
當(dāng)然,我們還可以對圖片做一些濾鏡處理。
- 高斯模糊處理
- img_gaussianblur = img.filter(ImageFilter.GaussianBlur(30))
- img_gaussianblur.show()
- 獲取照片輪廓
- img_contour = img.filter(ImageFilter.CONTOUR)
- img_contour.show()
- 亮度增強
如果照片亮度不夠,還可以對照片進(jìn)行亮度增強。
- color = ImageEnhance.Color(img)
- img_color = color.enhance(1.5)
- img_color.show()
二次創(chuàng)作
當(dāng)然,如果想對圖片進(jìn)行二次創(chuàng)作,比如添加一些輔助線,文字之類的可以用 ImageDraw 類來完成。
畫線
- draw = ImageDraw.Draw(img)
- draw.line((0, 0) + img.size, fill=20, width=3)
- draw.line((0, img.size[1], img.size[0], 0), fill=200, width=3)
- img.show()
文字
- draw = ImageDraw.Draw(img)
- font = ImageFont.truetype('AliPuHui-Bold.ttf', 200)
- text = 'This is a cat!'
- draw.text((450, 450), text, font=font, fill='pink')
- img.show()
當(dāng)然,如果有多行文字的話,直接加入換行符 \n 即可。
總結(jié)
今天派森醬帶大家一起通過使用 Pillow 庫對圖片進(jìn)行一些簡單的操作,事實上 Pillow 庫遠(yuǎn)不止此,將這些簡單的操作進(jìn)行組合甚至可以自創(chuàng)表情包,期待小伙伴們自行發(fā)掘更多更好玩的用法呀~