前言
-
大家好我是辣條哥,最近有小段時間沒有更新大家還記得我吧!最近其實在弄一些别的小事情,大家有興趣的話也可以來圍觀一下~
點選檢視→→→《五包辣條與Python》←←←希望大家也像在這裡大力支援一樣的支援辣條哥
- 廢話不多說我們直接進入今天正題,随着現在短視訊類越來越火,随之而來的就是大量的視訊圖像的處理,不過在辣條眼裡程式設計無所不能,你們覺得呢~接下來我們直接開始進入操作環節
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cGcq5CMyUDOyMGNyUGZjJ2Y3gzYyYzXwQTM1IDM5AzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
目錄
- 前言
- 入門了解1.顔色。
- 入門了解 2. 像素。
- 用Pillow處理圖像
- 1. 讀取和顯示圖像
- 2. 剪裁圖像
- 3. 生成縮略圖
- 4. 縮放和黏貼圖像
- 5. 旋轉和翻轉
- 6. 操作像素
- 7. 濾鏡效果
- 使用Pillow繪圖
- 總結
入門了解1.顔色。
如果你有使用顔料畫畫的經曆,那麼一定知道混合紅、黃、藍三種顔料可以得到其他的顔色,事實上這三種顔色就是美術中的三原色,它們是不能再分解的基本顔色。在計算機中,我們可以将紅、綠、藍三種色光以不同的比例疊加來組合成其他的顔色,是以這三種顔色就是色光三原色。在計算機系統中,我們通常會将一個顔色表示為一個RGB值或RGBA值(其中的A表示Alpha通道,它決定了透過這個圖像的像素,也就是透明度)。
名稱 | RGB值 | 名稱 | RGB值 |
White(白) | (255, 255, 255) | Red(紅) | (255, 0, 0) |
Green(綠) | (0, 255, 0) | Blue(藍) | (0, 0, 255) |
Gray(灰) | (128, 128, 128) | Yellow(黃) | (255, 255, 0) |
Black(黑) | (0, 0, 0) | Purple(紫) | (128, 0, 128) |
入門了解 2. 像素。
對于一個由數字序清單示的圖像來說,最小的機關就是圖像上單一顔色的小方格,這些小方塊都有一個明确的位置和被配置設定的色彩數值,而這些一小方格的顔色和位置決定了該圖像最終呈現出來的樣子,它們是不可分割的機關,我們通常稱之為像素(pixel)。每一個圖像都包含了一定量的像素,這些像素決定圖像在螢幕上所呈現的大小,大家如果愛好拍照或者自拍,對像素這個詞就不會陌生。
用Pillow處理圖像
Pillow是由從著名的Python圖像處理庫PIL發展出來的一個分支,通過Pillow可以實作圖像壓縮和圖像處理等各種操作。可以使用下面的指令來安裝Pillow。
pip install pillow
Pillow中最為重要的是
Image
類,可以通過
Image
子產品的
open
函數來讀取圖像并獲得
Image
類型的對象。
1. 讀取和顯示圖像
from PIL import Image
# 讀取圖像獲得Image對象
image = Image.open('guido.jpg')
# 通過Image對象的format屬性獲得圖像的格式
print(image.format) # JPEG
# 通過Image對象的size屬性獲得圖像的尺寸
print(image.size) # (500, 750)
# 通過Image對象的mode屬性擷取圖像的模式
print(image.mode) # RGB
# 通過Image對象的show方法顯示圖像
image.show()
2. 剪裁圖像
# 通過Image對象的crop方法指定剪裁區域剪裁圖像
image.crop((80, 20, 310, 360)).show()
3. 生成縮略圖
# 通過Image對象的thumbnail方法生成指定尺寸的縮略圖
image.thumbnail((128, 128))
image.show()
4. 縮放和黏貼圖像
# 讀取駱昊的照片獲得Image對象
luohao_image = Image.open('luohao.png')
# 讀取吉多的照片獲得Image對象
guido_image = Image.open('guido.jpg')
# 從吉多的照片上剪裁出吉多的頭
guido_head = guido_image.crop((80, 20, 310, 360))
width, height = guido_head.size
# 使用Image對象的resize方法修改圖像的尺寸
# 使用Image對象的paste方法将吉多的頭粘貼到駱昊的照片上
luohao_image.paste(guido_head.resize((int(width / 1.5), int(height / 1.5))), (172, 40))
luohao_image.show()
5. 旋轉和翻轉
= Image.open('guido.jpg')
# 使用Image對象的rotate方法實作圖像的旋轉
image.rotate(45).show()
# 使用Image對象的transpose方法實作圖像翻轉
# Image.FLIP_LEFT_RIGHT - 水準翻轉
# Image.FLIP_TOP_BOTTOM - 垂直翻轉
image.transpose(Image.FLIP_TOP_BOTTOM).show()
6. 操作像素
for x in range(80, 310):
for y in range(20, 360):
# 通過Image對象的putpixel方法修改圖像指定像素點
image.putpixel((x, y), (128, 128, 128))
image.show()
7. 濾鏡效果
from PIL import ImageFilter
# 使用Image對象的filter方法對圖像進行濾鏡處理
# ImageFilter子產品包含了諸多預設的濾鏡也可以自定義濾鏡
image.filter(ImageFilter.CONTOUR).show()
使用Pillow繪圖
Pillow中有一個名為
ImageDraw
的子產品,該子產品的
Draw
函數會傳回一個
ImageDraw
對象,通過
ImageDraw
對象的
arc
、
line
、
rectangle
、
ellipse
、
polygon
等方法,可以在圖像上繪制出圓弧、線條、矩形、橢圓、多邊形等形狀,也可以通過該對象的
text
方法在圖像上添加文字。
完整的代碼如下所示。
import random
from PIL import Image, ImageDraw, ImageFont
def random_color():
"""生成随機顔色"""
red = random.randint(0, 255)
green = random.randint(0, 255)
blue = random.randint(0, 255)
return red, green, blue
width, height = 800, 600
# 建立一個800*600的圖像,背景色為白色
image = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
# 建立一個ImageDraw對象
drawer = ImageDraw.Draw(image)
# 通過指定字型和大小獲得ImageFont對象
font = ImageFont.truetype('Kongxin.ttf', 32)
# 通過ImageDraw對象的text方法繪制文字
drawer.text((300, 50), 'Hello, world!', fill=(255, 0, 0), font=font)
# 通過ImageDraw對象的line方法繪制兩條對角直線
drawer.line((0, 0, width, height), fill=(0, 0, 255), width=2)
drawer.line((width, 0, 0, height), fill=(0, 0, 255), width=2)
xy = width // 2 - 60, height // 2 - 60, width // 2 + 60, height // 2 + 60
# 通過ImageDraw對象的rectangle方法繪制矩形
drawer.rectangle(xy, outline=(255, 0, 0), width=2)
# 通過ImageDraw對象的ellipse方法繪制橢圓
for i in range(4):
left, top, right, bottom = 150 + i * 120, 220, 310 + i * 120, 380
drawer.ellipse((left, top, right, bottom), outline=random_color(), width=8)
# 顯示圖像
image.show()
# 儲存圖像
image.save('result.png')
注意:上面代碼中使用的字型檔案需要根據自己準備,可以選擇自己喜歡的字型檔案并放置在代碼目錄下。