Pillow是Python里的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以及基本的圖像處理操作等。
創新互聯公司主打移動網站、網站制作、做網站、網站改版、網絡推廣、網站維護、域名申請、等互聯網信息服務,為各行業提供服務。在技術實力的保障下,我們為客戶承諾穩定,放心的服務,根據網站的內容與功能再決定采用什么樣的設計。最后,要實現符合網站需求的內容、功能與設計,我們還會規劃穩定安全的技術方案做保障。
1)使用 Image 類
PIL最重要的類是 Image class, 你可以通過多種方法創建這個類的實例;你可以從文件加載圖像,或者處理其他圖像, 或者從 scratch 創建。
要從文件加載圖像,可以使用open( )函數,在Image模塊中:
1
2
from PIL import Image
im = Image.open("E:/photoshop/1.jpg")
加載成功后,將返回一個Image對象,可以通過使用示例屬性查看文件內容:
1
2
3
print(im.format, im.size, im.mode)
('JPEG', (600, 351), 'RGB')
format 這個屬性標識了圖像來源。如果圖像不是從文件讀取它的值就是None。size屬性是一個二元tuple,包含width和height(寬度和高度,單位都是px)。 mode 屬性定義了圖像bands的數量和名稱,以及像素類型和深度。常見的modes 有 “L” (luminance) 表示灰度圖像, “RGB” 表示真彩色圖像, and “CMYK” 表示出版圖像。
如果文件打開錯誤,返回 IOError 錯誤。
只要你有了 Image 類的實例,你就可以通過類的方法處理圖像。比如,下列方法可以顯示圖像:
1
im.show()
2)讀寫圖像
PIL 模塊支持大量圖片格式。使用在 Image 模塊的 open() 函數從磁盤讀取文件。你不需要知道文件格式就能打開它,這個庫能夠根據文件內容自動確定文件格式。要保存文件,使用 Image 類的 save() 方法。保存文件的時候文件名變得重要了。除非你指定格式,否則這個庫將會以文件名的擴展名作為格式保存。
加載文件,并轉化為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() 方法的第二個參數可以指定文件格式。
3)創建縮略圖
縮略圖是網絡開發或圖像軟件預覽常用的一種基本技術,使用Python的Pillow圖像庫可以很方便的建立縮略圖,如下:
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")
上段代碼對photoshop下的jpg圖像文件全部創建縮略圖,并保存,glob模塊是一種智能化的文件名匹配技術,在批圖像處理中經常會用到。
注意:Pillow庫不會直接解碼或者加載圖像柵格數據。當你打開一個文件,只會讀取文件頭信息用來確定格式,顏色模式,大小等等,文件的剩余部分不會主動處理。這意味著打開一個圖像文件的操作十分快速,跟圖片大小和壓縮方式無關。
4)圖像的剪切、粘貼與合并操作
Image 類包含的方法允許你操作圖像部分選區,PIL.Image.Image.crop 方法獲取圖像的一個子矩形選區,如:
1
2
3
4
# crop, paste and merge
im = Image.open("E:/photoshop/lena.jpg")
box = (100,100,300,300)
region = im.crop(box)
矩形選區有一個4元元組定義,分別表示左、上、右、下的坐標。這個庫以左上角為坐標原點,單位是px,所以上訴代碼復制了一個 200×200 pixels 的矩形選區。這個選區現在可以被處理并且粘貼到原圖。
1
2
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
當你粘貼矩形選區的時候必須保證尺寸一致。此外,矩形選區不能在圖像外。然而你不必保證矩形選區和原圖的顏色模式一致,因為矩形選區會被自動轉換顏色。
5)分離和合并顏色通道
對于多通道圖像,有時候在處理時希望能夠分別對每個通道處理,處理完成后重新合成多通道,在Pillow中,很簡單,如下:
1
2
r,g,b = im.split()
im = Image.merge("RGB", (r,g,b))
對于split( )函數,如果是單通道的,則返回其本身,否則,返回各個通道。
6)幾何變換
對圖像進行幾何變換是一種基本處理,在Pillow中包括resize( )和rotate( ),如用法如下:
1
2
out = im.resize((128,128))
out = im.rotate(45) # degree conter-clockwise
其中,resize( )函數的參數是一個新圖像大小的元祖,而rotate( )則需要輸入順時針的旋轉角度。在Pillow中,對于一些常見的旋轉作了專門的定義:
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)顏色空間變換
在處理圖像時,根據需要進行顏色空間的轉換,如將彩色轉換為灰度:
1
2
cmyk = im.convert("CMYK")
gray = im.convert("L")
8)圖像濾波
例如:在C:\TDDOWNLOAD目錄下有a.txt、b.txt兩個文件,另有\sub1子文件夾,C:\TDDOWNLOAD\sub1下又有c.txt、d.txt兩個文件。 1. os.walk os.walk()返回一個三元素的tuple:當前路徑、子文件夾名稱、文件列表。 import os def fun( path ):... for root, dirs, files in os.walk( path ):... for fn in files:... print root, fn... fun( r'C:\TDDOWNLOAD' )C:\TDDOWNLOAD a.txtC:\TDDOWNLOAD b.txtC:\TDDOWNLOAD\sub1 c.txtC:\TDDOWNLOAD\sub1 d.txt 2. glob.glob glob.glob()只接受一個參數,這個參數既代有路徑,又代有匹配模式,返回值為一個列表。注意,glob.glob()無法直接穿透子文件夾,需要自己處理: def fun( path ):... for fn in glob.glob( path + os.sep + '*' ): # '*'代表匹配所有文件... if os.path.isdir( fn ): # 如果結果為文件夾... fun( fn ) # 遞歸... else:... print fn... fun( r'C:\TDDOWNLOAD' )C:\TDDOWNLOAD\a.txtC:\TDDOWNLOAD\b.txtC:\TDDOWNLOAD\sub1\c.txtC:\TDDOWNLOAD\sub1\d.txt '*'為匹配模式,代表匹配所有文件,只有這樣才能將子文件夾查出來,以便遞歸深入,探查下一層的文件。
使用路徑對象glob()函數和rglob()函數,可以查看指定路徑下的文件和子文件夾,兩者的區別在于,glob()函數只進行一級查找,而rglob()函數會進行多級查找。
from pathlib import Path
p = Path('d:\\文件夾\\')
r = p.glob('*')
for i in r:
print(i) #顯示glob()函數的結果
print('-' * 25) #這里是分割線
r = p.rglob('*')
for i in r:
print(i)#顯示rglob()函數的結果
查看對應結果如下:
d:\11\11.txt
d:\11\r.mp3
d:\11\t.mp3
d:\11\tp1000
d:\11\文件夾
-------------------------
d:\11\11.txt
d:\11\r.mp3
d:\11\t.mp3
d:\11\tp1000
d:\11\文件夾
d:\11\文件夾\文檔.txt
________________END______________
import re,os
import sys
def filelist(path,r,f):
"""
function to find the directions and files in the given direction
according to your parameters,fileonly or not,recursively find or not.
"""
file_list = []
os.chdir(path)
filename = os.listdir(path)
if len(filename) == 0:
os.chdir(os.pardir)
return filename
if r == 1: ##
if f == 0: # r = 1, recursively find directions and files. r = 0 otherwise.
for name in filename: # f = 1, find files only, f = 0,otherwise.
if os.path.isdir(name): ##
file_list.append(name)
name = os.path.abspath(name)
subfile_list = filelist(name,r,f)
for n in range(len(subfile_list)):
subfile_list[n] = '\t'+subfile_list[n]
file_list += subfile_list
else:
file_list.append(name)
os.chdir(os.pardir)
return file_list
elif f == 1:
for name in filename:
if os.path.isdir(name):
name = os.path.abspath(name)
subfile_list = filelist(name,r,f)
for n in range(len(subfile_list)):
subfile_list[n] = '\t'+subfile_list[n]
file_list += subfile_list
else:
file_list.append(name)
os.chdir(os.pardir)
return file_list
else:
print 'Error1'
elif r == 0:
if f == 0:
os.chdir(os.pardir)
return filename
elif f == 1:
for name in filename:
if os.path.isfile(name):
file_list.append(name)
os.chdir(os.pardir)
return file_list
else:
print 'Error2'
else:
print 'Error3'
'''
f = 0:list all the files and folders
f = 1:list files only
r = 1:list files or folders recursively,all the files and folders in the current direction and subdirection
r = 0:only list files or folders in the current direction,not recursively
as for RE to match certern file or dirction,you can write yourself, it is easier than the function above.Just use RE to match the result,if match,print;else,pass
"""
#this python file is used to read SAC file
import os
import sys
import subprocess
import glob
from obspy.core import read
from PyQt5.QtWidgetsimport *
from PyQt5.QtGuiimport *
from PyQt5.QtCoreimport *
from PyQt5import QtCore, QtGui, QtWidgets
'''import os 是導入標準庫os,利用其中的API。
sys模塊包含了與Python解釋器和它的環境有關的函數。
glob是python自帶的一個文件操作模塊,用它查找符合目的的文件,類似于Windows下的文件搜索,支持通配符操作
subprocess允許創建一個新的進程讓其執行另外的程序,并與它進行通信,獲取標準的輸入、標準輸出、標準錯誤以及返回碼等
'''
def run(path):
# path = QtWidgets.QFileDialog.getExistingDirectory(None, "Select File Directory to Save File", "")
fileName = os.listdir(path)
os.chdir(path)
os.putenv("SAC_DISPLAY_COPYRIGHT", '0')
for namein fileName:
# name = i
#for file in glob.glob("*.SAC"):
#glob.glob是匹配所有符合條件的文件,并將其以list的形式返回
#os.putenv("SAC_DISPLAY_COPYRIGHT", '0') #os.putenv(‘環境變量名稱’, ‘環境變量值’)
#p = subprocess.Popen(['sac'], stdin=subprocess.PIPE)#Popen表示調用sac
#stdin指向鍵盤輸入,standard input
#Python 3 利用 subprocess 實現管道( pipe )交互操作讀/寫通信
# s = "r " + name + " \n"? ###這里應該是傳入某個文件,所以應該有個讀取文件的按鈕
# s += "qdp off\n"
# s += "ch allt (0 - 1,o) iztype IO \n"? #修改發震時刻為零
# s += "rmean; rtrend; taper \n"? #去均值,去線性趨勢,去尖滅
# s += "bp c 0.05 10 n 4 p 2 \n"? #帶通濾波
# s += "w over\n"
# s += "r *BHN *BHE \n"? #分量旋轉,讀入N、E分量,rot并修改頭段變量
# s += "rotate to gcp"
# s += "w .BHR .BHT"
# s += "r *.BHR\n"
# s += "ch KCMPNM BHR\n"
# s += "w over\n"
# s += "r *.BHT\n"
# s += "ch KCMPNM BHT\n"
# s += "w over\n"
# s += "p \n"
# s += "saveimg 2009.ps\n"
# s += "q\n"
? ? s ="r " + name +" \n"
? ? #s += "ppk p 3 a m\n"
? ? s +="w over\n"
? ? s +="q \n"
? ? # p.communicate(s.encode()) #通過p.communicate() 將命令s.encode() 傳遞給sac,實現sac的操作
? ? subprocess.Popen(['sac'], stdin=subprocess.PIPE).communicate(s.encode())
5個常用的Python標準庫:
1、os:提供了不少與操作系統相關聯的函數庫
os包是Python與操作系統的接口。我們可以用os包來實現操作系統的許多功能,比如管理系統進程,改變當前路徑,改變文件權限等。但要注意,os包是建立在操作系統的平臺上的,許多功能在Windows系統上是無法實現的。另外,在使用os包中,要注意其中的有些功能已經被其他的包取代。
我們通過文件系統來管理磁盤上儲存的文件。查找、刪除、復制文件以及列出文件列表等都是常見的文件操作。這些功能通常可以在操作系統中看到,但現在可以通過Python標準庫中的glob包、shutil包、os.path包以及os包的一些函數等,在Python內部實現。
2、sys:通常用于命令行參數的庫
sys包被用于管理Python自身的運行環境。Python是一個解釋器,也是一個運行在操作系統上的程序。我們可以用sys包來控制這一程序運行的許多參數,比如說Python運行所能占據的內存和CPU,Python所要掃描的路徑等。另一個重要功能是和Python自己的命令行互動,從命令行讀取命令和參數。
3、random:用于生成隨機數的庫
Python標準庫中的random函數,可以生成隨機浮點數、整數、字符串,甚至幫助你隨機選擇列表序列中的一個元素,打亂一組數據等。
4、math:提供了數學常數和數學函數
標準庫中,Python定義了一些新的數字類型,以彌補之前的數字類型可能的不足。標準庫還包含了random包,用于處理隨機數相關的功能。math包補充了一些重要的數學常數和數學函數,比如pi、三角函數等等。
5、datetime:日期和時間的操作庫
日期和時間的管理并不復雜,但容易犯錯。Python的標準庫中對日期和時間的管理頗為完善,你不僅可以進行日期時間的查詢和變換,還可以對日期時間進行運算。通過這些標準庫,還可以根據需要控制日期時間輸出的文本格式。
除此之外,Python還有很多第三方庫,了解更多可移步:oldboyedu
分享標題:glob函數python glob函數遍歷目錄
文章URL:http://m.kartarina.com/article26/hjocjg.html
成都網站建設公司_創新互聯,為您提供網站建設、關鍵詞優化、網站制作、網站內鏈、標簽優化、網站設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯