import?Image
成都創(chuàng)新互聯(lián)專注于西平網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供西平營(yíng)銷型網(wǎng)站建設(shè),西平網(wǎng)站制作、西平網(wǎng)頁(yè)設(shè)計(jì)、西平網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造西平網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供西平網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
import?os
import?glob
dir="f:\mobile"
#取出指定文件
file=glob.glob(os.path.join(dir,'xxx.JPG'))
#打開(kāi)圖片
img?=?Image.open(file)
#顯示圖片
img.show()
print?img.format,?img.size,?img.mode
print?"?rotating?image....."
im=img.rotate(90)
im.save(image)
我不知道你怎么畫的,但旋轉(zhuǎn)請(qǐng)參考以上代碼
PIL (Python Imaging Library)
Python圖像處理庫(kù),該庫(kù)支持多種文件格式,提供強(qiáng)大的圖像處理功能。
PIL中最重要的類是Image類,該類在Image模塊中定義。
從文件加載圖像:
如果成功,這個(gè)函數(shù)返回一個(gè)Image對(duì)象?,F(xiàn)在你可以使用該對(duì)象的屬性來(lái)探索文件的內(nèi)容。
format 屬性指定了圖像文件的格式,如果圖像不是從文件中加載的則為 None 。
size 屬性是一個(gè)2個(gè)元素的元組,包含圖像寬度和高度(像素)。
mode 屬性定義了像素格式,常用的像素格式為:“L” (luminance) - 灰度圖, “RGB” , “CMYK”。
如果文件打開(kāi)失敗, 將拋出IOError異常。
一旦你擁有一個(gè)Image類的實(shí)例,你就可以用該類定義的方法操作圖像。比如:顯示
( show() 的標(biāo)準(zhǔn)實(shí)現(xiàn)不是很有效率,因?yàn)樗鼘D像保存到一個(gè)臨時(shí)文件,然后調(diào)用外部工具(比如系統(tǒng)的默認(rèn)圖片查看軟件)顯示圖像。該函數(shù)將是一個(gè)非常方便的調(diào)試和測(cè)試工具。)
接下來(lái)的部分展示了該庫(kù)提供的不同功能。
PIL支持多種圖像格式。從磁盤中讀取文件,只需使用 Image 模塊中的 open 函數(shù)。不需要提供文件的圖像格式。PIL庫(kù)將根據(jù)文件內(nèi)容自動(dòng)檢測(cè)。
如果要保存到文件,使用 Image 模塊中的 save 函數(shù)。當(dāng)保存文件時(shí),文件名很重要,除非指定格式,否則PIL庫(kù)將根據(jù)文件的擴(kuò)展名來(lái)決定使用哪種格式保存。
** 轉(zhuǎn)換文件到JPEG **
save 函數(shù)的第二個(gè)參數(shù)可以指定使用的文件格式。如果文件名中使用了一個(gè)非標(biāo)準(zhǔn)的擴(kuò)展名,則必須通過(guò)第二個(gè)參數(shù)來(lái)指定文件格式。
** 創(chuàng)建JPEG縮略圖 **
需要注意的是,PIL只有在需要的時(shí)候才加載像素?cái)?shù)據(jù)。當(dāng)你打開(kāi)一個(gè)文件時(shí),PIL只是讀取文件頭獲得文件格式、圖像模式、圖像大小等屬性,而像素?cái)?shù)據(jù)只有在需要的時(shí)候才會(huì)加載。
這意味著打開(kāi)一個(gè)圖像文件是一個(gè)非??斓牟僮?,不會(huì)受文件大小和壓縮算法類型的影響。
** 獲得圖像信息 **
Image 類提供了某些方法,可以操作圖像的子區(qū)域。提取圖像的某個(gè)子區(qū)域,使用 crop() 函數(shù)。
** 復(fù)制圖像的子區(qū)域 **
定義區(qū)域使用一個(gè)包含4個(gè)元素的元組,(left, upper, right, lower)。坐標(biāo)原點(diǎn)位于左上角。上面的例子提取的子區(qū)域包含300x300個(gè)像素。
該區(qū)域可以做接下來(lái)的處理然后再粘貼回去。
** 處理子區(qū)域然后粘貼回去 **
當(dāng)往回粘貼時(shí),區(qū)域的大小必須和參數(shù)匹配。另外區(qū)域不能超出圖像的邊界。然而原圖像和區(qū)域的顏色模式無(wú)需匹配。區(qū)域會(huì)自動(dòng)轉(zhuǎn)換。
** 滾動(dòng)圖像 **
paste() 函數(shù)有個(gè)可選參數(shù),接受一個(gè)掩碼圖像。掩碼中255表示指定位置為不透明,0表示粘貼的圖像完全透明,中間的值表示不同級(jí)別的透明度。
PIL允許分別操作多通道圖像的每個(gè)通道,比如RGB圖像。 split() 函數(shù)創(chuàng)建一個(gè)圖像集合,每個(gè)圖像包含一個(gè)通道。 merge() 函數(shù)接受一個(gè)顏色模式和一個(gè)圖像元組,然后將它們合并為一個(gè)新的圖像。接下來(lái)的例子交換了一個(gè)RGB圖像的三個(gè)通道。
** 分離和合并圖像通道 **
對(duì)于單通道圖像, split() 函數(shù)返回圖像本身。如果想處理各個(gè)顏色通道,你可能需要先將圖像轉(zhuǎn)為RGB模式。
resize() 函數(shù)接受一個(gè)元組,指定圖像的新大小。
rotate() 函數(shù)接受一個(gè)角度值,逆時(shí)針旋轉(zhuǎn)。
** 基本幾何變換 **
圖像旋轉(zhuǎn)90度也可以使用 transpose() 函數(shù)。 transpose() 函數(shù)也可以水平或垂直翻轉(zhuǎn)圖像。
** transpose **
transpose() 和 rotate() 函數(shù)在性能和結(jié)果上沒(méi)有區(qū)別。
更通用的圖像變換函數(shù)為 transform() 。
PIL可以轉(zhuǎn)換圖像的像素模式。
** 轉(zhuǎn)換顏色模式 **
PIL庫(kù)支持從其他模式轉(zhuǎn)為“L”或“RGB”模式,其他模式之間轉(zhuǎn)換,則需要使用一個(gè)中間圖像,通常是“RGB”圖像。
ImageFilter 模塊包含多個(gè)預(yù)定義的圖像增強(qiáng)過(guò)濾器用于 filter() 函數(shù)。
** 應(yīng)用過(guò)濾器 **
point() 函數(shù)用于操作圖像的像素值。該函數(shù)通常需要傳入一個(gè)函數(shù)對(duì)象,用于操作圖像的每個(gè)像素:
** 應(yīng)用點(diǎn)操作 **
使用以上技術(shù)可以快速地對(duì)圖像像素應(yīng)用任何簡(jiǎn)單的表達(dá)式??梢越Y(jié)合 point() 函數(shù)和 paste 函數(shù)修改圖像。
** 處理圖像的各個(gè)通道 **
注意用于創(chuàng)建掩碼圖像的語(yǔ)法:
Python計(jì)算邏輯表達(dá)式采用短路方式,即:如果and運(yùn)算符左側(cè)為false,就不再計(jì)算and右側(cè)的表達(dá)式,而且返回結(jié)果是表達(dá)式的結(jié)果。比如 a and b 如果a為false則返回a,如果a為true則返回b,詳見(jiàn)Python語(yǔ)法。
對(duì)于更多高級(jí)的圖像增強(qiáng)功能,可以使用 ImageEnhance 模塊中的類。
可以調(diào)整圖像對(duì)比度、亮度、色彩平衡、銳度等。
** 增強(qiáng)圖像 **
PIL庫(kù)包含對(duì)圖像序列(動(dòng)畫格式)的基本支持。支持的序列格式包括 FLI/FLC 、 GIF 和一些實(shí)驗(yàn)性的格式。 TIFF 文件也可以包含多個(gè)幀。
當(dāng)打開(kāi)一個(gè)序列文件時(shí),PIL庫(kù)自動(dòng)加載第一幀。你可以使用 seek() 函數(shù) tell() 函數(shù)在不同幀之間移動(dòng)。
** 讀取序列 **
如例子中展示的,當(dāng)序列到達(dá)結(jié)尾時(shí),將拋出EOFError異常。
注意當(dāng)前版本的庫(kù)中多數(shù)底層驅(qū)動(dòng)只允許seek到下一幀。如果想回到前面的幀,只能重新打開(kāi)圖像。
以下迭代器類允許在for語(yǔ)句中循環(huán)遍歷序列:
** 一個(gè)序列迭代器類 **
PIL庫(kù)包含一些函數(shù)用于將圖像、文本打印到Postscript打印機(jī)。以下是一個(gè)簡(jiǎn)單的例子。
** 打印到Postscript **
如前所述,可以使用 open() 函數(shù)打開(kāi)圖像文件,通常傳入一個(gè)文件名作為參數(shù):
如果打開(kāi)成功,返回一個(gè)Image對(duì)象,否則拋出IOError異常。
也可以使用一個(gè)file-like object代替文件名(暫可以理解為文件句柄)。該對(duì)象必須實(shí)現(xiàn)read,seek,tell函數(shù),必須以二進(jìn)制模式打開(kāi)。
** 從文件句柄打開(kāi)圖像 **
如果從字符串?dāng)?shù)據(jù)中讀取圖像,使用StringIO類:
** 從字符串中讀取 **
如果圖像文件內(nèi)嵌在一個(gè)大文件里,比如 tar 文件中。可以使用ContainerIO或TarIO模塊來(lái)訪問(wèn)。
** 從tar文檔中讀取 **
** 該小節(jié)不太理解,請(qǐng)參考原文 **
有些解碼器允許當(dāng)讀取文件時(shí)操作圖像。通常用于在創(chuàng)建縮略圖時(shí)加速解碼(當(dāng)速度比質(zhì)量重要時(shí))和輸出一個(gè)灰度圖到激光打印機(jī)時(shí)。
draft() 函數(shù)。
** Reading in draft mode **
輸出類似以下內(nèi)容:
注意結(jié)果圖像可能不會(huì)和請(qǐng)求的模式和大小匹配。如果要確保圖像不大于指定的大小,請(qǐng)使用 thumbnail 函數(shù)。
Python2.7 教程 PIL
Python 之 使用 PIL 庫(kù)做圖像處理
來(lái)自
Pillow是Python里的圖像處理庫(kù)(PIL:Python Image Library),提供了了廣泛的文件格式支持,強(qiáng)大的圖像處理能力,主要包括圖像儲(chǔ)存、圖像顯示、格式轉(zhuǎn)換以及基本的圖像處理操作等。
1)使用 Image 類
PIL最重要的類是 Image class, 你可以通過(guò)多種方法創(chuàng)建這個(gè)類的實(shí)例;你可以從文件加載圖像,或者處理其他圖像, 或者從 scratch 創(chuàng)建。
要從文件加載圖像,可以使用open( )函數(shù),在Image模塊中:
1
2
from PIL import Image
im = Image.open("E:/photoshop/1.jpg")
加載成功后,將返回一個(gè)Image對(duì)象,可以通過(guò)使用示例屬性查看文件內(nèi)容:
1
2
3
print(im.format, im.size, im.mode)
('JPEG', (600, 351), 'RGB')
format 這個(gè)屬性標(biāo)識(shí)了圖像來(lái)源。如果圖像不是從文件讀取它的值就是None。size屬性是一個(gè)二元tuple,包含width和height(寬度和高度,單位都是px)。 mode 屬性定義了圖像bands的數(shù)量和名稱,以及像素類型和深度。常見(jiàn)的modes 有 “L” (luminance) 表示灰度圖像, “RGB” 表示真彩色圖像, and “CMYK” 表示出版圖像。
如果文件打開(kāi)錯(cuò)誤,返回 IOError 錯(cuò)誤。
只要你有了 Image 類的實(shí)例,你就可以通過(guò)類的方法處理圖像。比如,下列方法可以顯示圖像:
1
im.show()
2)讀寫圖像
PIL 模塊支持大量圖片格式。使用在 Image 模塊的 open() 函數(shù)從磁盤讀取文件。你不需要知道文件格式就能打開(kāi)它,這個(gè)庫(kù)能夠根據(jù)文件內(nèi)容自動(dòng)確定文件格式。要保存文件,使用 Image 類的 save() 方法。保存文件的時(shí)候文件名變得重要了。除非你指定格式,否則這個(gè)庫(kù)將會(huì)以文件名的擴(kuò)展名作為格式保存。
加載文件,并轉(zhuǎn)化為png格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
"Python Image Library Test"
from PIL import Image
import os
import sys
for infile in sys.argv[1:]:
f,e = os.path.splitext(infile)
outfile = f +".png"
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print("Cannot convert", infile)
save() 方法的第二個(gè)參數(shù)可以指定文件格式。
3)創(chuàng)建縮略圖
縮略圖是網(wǎng)絡(luò)開(kāi)發(fā)或圖像軟件預(yù)覽常用的一種基本技術(shù),使用Python的Pillow圖像庫(kù)可以很方便的建立縮略圖,如下:
1
2
3
4
5
6
7
# create thumbnail
size = (128,128)
for infile in glob.glob("E:/photoshop/*.jpg"):
f, ext = os.path.splitext(infile)
img = Image.open(infile)
img.thumbnail(size,Image.ANTIALIAS)
img.save(f+".thumbnail","JPEG")
上段代碼對(duì)photoshop下的jpg圖像文件全部創(chuàng)建縮略圖,并保存,glob模塊是一種智能化的文件名匹配技術(shù),在批圖像處理中經(jīng)常會(huì)用到。
注意:Pillow庫(kù)不會(huì)直接解碼或者加載圖像柵格數(shù)據(jù)。當(dāng)你打開(kāi)一個(gè)文件,只會(huì)讀取文件頭信息用來(lái)確定格式,顏色模式,大小等等,文件的剩余部分不會(huì)主動(dòng)處理。這意味著打開(kāi)一個(gè)圖像文件的操作十分快速,跟圖片大小和壓縮方式無(wú)關(guān)。
4)圖像的剪切、粘貼與合并操作
Image 類包含的方法允許你操作圖像部分選區(qū),PIL.Image.Image.crop 方法獲取圖像的一個(gè)子矩形選區(qū),如:
1
2
3
4
# crop, paste and merge
im = Image.open("E:/photoshop/lena.jpg")
box = (100,100,300,300)
region = im.crop(box)
矩形選區(qū)有一個(gè)4元元組定義,分別表示左、上、右、下的坐標(biāo)。這個(gè)庫(kù)以左上角為坐標(biāo)原點(diǎn),單位是px,所以上訴代碼復(fù)制了一個(gè) 200×200 pixels 的矩形選區(qū)。這個(gè)選區(qū)現(xiàn)在可以被處理并且粘貼到原圖。
1
2
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
當(dāng)你粘貼矩形選區(qū)的時(shí)候必須保證尺寸一致。此外,矩形選區(qū)不能在圖像外。然而你不必保證矩形選區(qū)和原圖的顏色模式一致,因?yàn)榫匦芜x區(qū)會(huì)被自動(dòng)轉(zhuǎn)換顏色。
5)分離和合并顏色通道
對(duì)于多通道圖像,有時(shí)候在處理時(shí)希望能夠分別對(duì)每個(gè)通道處理,處理完成后重新合成多通道,在Pillow中,很簡(jiǎn)單,如下:
1
2
r,g,b = im.split()
im = Image.merge("RGB", (r,g,b))
對(duì)于split( )函數(shù),如果是單通道的,則返回其本身,否則,返回各個(gè)通道。
6)幾何變換
對(duì)圖像進(jìn)行幾何變換是一種基本處理,在Pillow中包括resize( )和rotate( ),如用法如下:
1
2
out = im.resize((128,128))
out = im.rotate(45) # degree conter-clockwise
其中,resize( )函數(shù)的參數(shù)是一個(gè)新圖像大小的元祖,而rotate( )則需要輸入順時(shí)針的旋轉(zhuǎn)角度。在Pillow中,對(duì)于一些常見(jiàn)的旋轉(zhuǎn)作了專門的定義:
1
2
3
4
5
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
7)顏色空間變換
在處理圖像時(shí),根據(jù)需要進(jìn)行顏色空間的轉(zhuǎn)換,如將彩色轉(zhuǎn)換為灰度:
1
2
cmyk = im.convert("CMYK")
gray = im.convert("L")
8)圖像濾波