Python模塊:PIL

PIL:是Python Image Library的縮寫,圖像處理的模塊。Image,ImageFont,ImageDraw,ImageFilterpython

 

Image模塊:dom

經常使用方法:函數

open()  #打開圖片

new(mode,size,color)   #建立一張空白圖片

save("test.gif","GIF")   #保存(新圖片路徑和名稱,保存格式)

size()   #獲取圖片大小

thumbnail(weight,high)   #縮放圖片大小(寬,高)

show()    #顯示圖片

blend(img1,img2,alpha)   #兩張圖片相加,alpha表示img1和img2的比例參數。

crop()   #剪切,提取某個矩陣大小的圖像。它接收一個四元素的元組做爲參數,各元素爲(left, upper, right, lower),座標系統的原點(0, 0)是左上角。

rotate(45)    #逆時針旋轉45度

transpose()    #旋轉圖像
    transpose(Image.FLIP_LEFT_RIGHT)       #左右對換。
    transpose(Image.FLIP_TOP_BOTTOM)       #上下對換。
    transpose(Image.ROTATE_90)             #旋轉 90 度角。
    transpose(Image.ROTATE_180)            #旋轉 180 度角。
    transpose(Image.ROTATE_270)            #旋轉 270 度角。

paste(im,box)#粘貼box大小的im到原先的圖片對象中。

convert()    #用來將圖像轉換爲不一樣色彩模式。

filters()     #濾鏡
    BLUR   #虛化
    EMBOSS
resize((128,128))     #resize成128*128像素大小

convert("RGBA")    #圖形類型轉換

getpixel((4,4))   #獲取某個像素位置的值

putpixel((4,4),(255,0,0))    #寫入某個像素位置的值

 

實例:字體

import Image,ImageFilter

im = Image.open("E:\\QQ2.jpg")   #打開圖片
w,h = im.size   #獲取圖片的像素,其值爲象素意義上的寬和高
print(im.format)   #獲取圖片格式
print(im.size)    #獲取圖片像素
im.thumbnail((w//2,h//2))   #縮放圖片大小爲原來的一半
im.save("E:\\QQ_backup.jpg",'jpeg')    #保存圖片,以及保存格式爲jpeg
#im.show()    #顯示圖片
print(im.mode)    #顯示模式。 RGB(true color image),此外還有,L(luminance),CMTK(pre-press image)。
box = (100,100,200,200)
s = im.crop(box)   #圖像中提取出某個矩形大小的圖像。它接收一個四元素的元組做爲參數,各元素爲(left, upper, right, lower),座標系統的原點(0, 0)是左上角。
#s.show()
#s = s.transpose(Image.ROTATE_180)   #旋轉180°
#im.paste(s,box)   #粘貼
#im.show()

im = Image.open("E:\\QQ2.jpg")
im2 = im.filter(ImageFilter.EMBOSS)
im2.save("E:\\QQ_2.jpg",'jpeg')
#im2.show()

newImg = Image.new("RGBA",(640,480),(0,255,0))  #建立一張大小爲640*480顏色爲綠色的圖片
newImg.save("E:\\newImg.png","PNG")

輸出結果爲:spa

JPEG
(640, 640)
RGB

 

ImageFont模塊:存儲bitmap字體,用於ImageDraw類的text()方法。code

經常使用方法:orm

load()    #從指定的文件中加載一種字體,該函數返回對應的字體對象。若是該函數失敗,將產生IOError異常。

load_path()   #和函數load()同樣,可是若是沒有指定當前路徑的話,會從sys.path開始查找指定的字體文件。

truetype("C:\\Windows\\Fonts\\Arial.ttf", 18)   #加載字體對象,而且爲指定字體的大小。

load_default()   #加載一個默認字體

getsize()   #返回給定文本的寬度和高度

getmask()   #爲給定的文本返回一個位圖.若是字體使用了抗鋸齒,位圖的模式爲「L」,且其最大值爲255。不然,它的模式爲「1」。

 

ImageDraw模塊:對象

 經常使用方法:blog

 

(1)ImageDraw.Draw()   #對全部使用ImageDraw操做的圖片,要進行對象的建立。

import ImageDraw

t = Image.new('RGB',(640,480),'blue')   #建立一張新圖片
d = ImageDraw.Draw(t)   #建立一個可操做對象

 

(2)t.line([xi,yi,x2,y2],options)   #以x1,y1爲起點,x2,y2爲終點畫一條直線,也能夠寫成(x1,y1,x2,y2)或[(x1,y1),(x2,y2)]。options選項包含的fill選項規定直線的顏色。

import ImageDraw
import Image

t = Image.new('RGB',(700,700),'yellow')
d = ImageDraw.Draw(t)  

d.line([100,100,100,600],fill=10)
d.line((100,100,600,100),fill='red')
d.line((600,100,600,600),fill='black')
d.line([(100,600),600,600],fill='blue')
t.show()

 

(3)d.arc([x1,y1,x2,y2],startAngle,endAngle,options)    #在左上角座標爲x1,y1,右下角座標爲x2,y2的矩形區域內滿圓,以startAngle爲起始角度,endAngle爲終點角度,截取圓的一部分圓弧。若是x1,y1,xw,y2不是正方形,則在該區域內的最大橢圓中根據角度截取片斷。

d.arc((100,100,600,600),0,90,fill='red')   #畫一個上半圓弧 
d.arc((100,100,600,400),90,270,fill='blue')   #畫一個右半橢圓

 

(4)d.ellipse([x1,y1,x2,y2],options)   #用法同arc,用於畫圓(或者橢圓)。Options選項中fill表示將圓(或者橢圓)用指定顏色填滿,outlie表示只規定圓的顏色。

d.ellipse((100,100,600,600),outline=128)  #畫一個圓
d.ellipse((100,250,600,450),fill='blue')   #在圓裏畫一個橢圓

 

(5)d.chord([x1,y1,x2,y2],startAngle,endAngle,options)   #用法與arc相同,用來畫圓從startAngle到endAngle的弦。Options選項中fill表示將弦與圓弧之間空間用指定顏色填滿,outlie表示只規定弦線的顏色。

d.ellipse((100,100,600,600),outline=128)   #畫圓
d.chord((100,100,600,600),0,90,outline='red')  #畫一條弦
d.chord((100,100,600,600),90,180,fill='red')  #畫弦而且將弦與弧區域着色

 

(6)d.pieslice([x1,y1,x2,y2],startAngle,endAngle,options)   #用法與ellipse相同,用於畫起始角度間的扇形區域。options選項中fill選項將扇形區域用指定顏色填滿,outline選項只用指定顏色描出區域輪廓。

d.ellipse((100,100,600,600),outline=128)   #畫一個圓
d.pieslice((100,100,600,600),180,210,outline=128)   #在圓內畫180度到210度的扇形區域輪廓
d.pieslice((100,100,600,600),60,90,fill='blue')   #畫60度到90度的扇形區域

 

(7)d.polygon([x1,y1,x2,y2...],options)   #根據座標畫多邊形,Python會根據第一個參量中的xy座標對,鏈接出整個圖形。options選項中fill選項將多邊形區域用指定顏色填滿,outline選項只用指定顏色描出區域輪廓。

d.polygon([(200,200),(600,300),(300,600)],outline = "red")
d.polygon([(300,300),(500,300),(300,500),(500,500)],fill = "red")
t.show()

 

(8)d.rectangle([x1,y1,x2,y2],options)   #在給定區域內畫一個矩形,(x1,y1)表示矩形左上角座標值,(x2,y2)表示矩形右下角座標值。options選項中fill選項將多邊形區域用指定顏色填滿,outline選項只用指定顏色描出區域輪廓。

d.rectangle((200,200,500,500),outline = "red")   #畫矩陣
d.rectangle((250,300,450,400),fill = 128)

 

(9)d.text(position,  string,  options)   #Position是一個二元元組,指定字符串左上角座標,string是要寫入的字符串。options選項能夠爲fill或者font(只能選擇其中之一做爲第三參量,不能兩個同同時存在,要改變字體顏色,見ImageFont模塊中的NOTE)。其中fill指定字的顏色,font指定字體與字的尺寸,font必須爲ImageFont中指定的font類型,具體用法見ImageFont.Truetype()。

#在空白圖像上矩形區域內添加文字
text = "hello, python!"
d.rectangle((200,200,500,500),outline = "red")  
d.text((300,350),text,"red")

 

實例1:圖片

import Image,ImageFont,ImageDraw

image1 = Image.open("WALLPAPER.jpg")
draw = ImageDraw.Draw(image1)

ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\STXINGKA.TTF",120)
draw.rectangle((180,100,900,900),outline = "red")
draw.text((200,400),"www.okorder.com",font=ft,fill="blue")
image1.save("new_wallpaper.jpg","JPEG")

 

實例2:生成驗證碼

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import Image, ImageDraw, ImageFont, ImageFilter
import random
# 隨機字母:
def rndChar():
    return chr(random.randint(65, 90))
# 隨機顏色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255),random.randint(64, 255))
# 隨機顏色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127),random.randint(32, 127))
# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 建立Font對象:
font = ImageFont.truetype("C:\\Windows\\Fonts\\Arial.ttf", 36)  #注意系統字體的路徑
# 建立Draw對象:
draw = ImageDraw.Draw(image)
# 填充每一個像素:
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())
# 輸出文字:
for t in range(4):
    draw.text((60 * t + 10, 10), rndChar(), font=font,
fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
im = image.save('code.jpg', 'jpeg')
m = Image.open('code.jpg')
m.show()

輸出結果爲:

相關文章
相關標籤/搜索