首頁 > 軟體

一文教會你使用Python批次縮放圖片

2022-02-20 13:00:03

導讀

為了解決圖片被改變大小後,比例保持不變(這樣就不會變形了)

圖片需要壓縮,避免填圖後的word檔案太大通過Image模組中的resize函數,就能給解決如上問題。我們還是先按“修改時間”順序獲取圖片資料夾下的所有圖片的完整路徑

實際演示階段

我們需要做的事情就是將圖一變為圖二 圖一:

圖二:

進行等比例縮小。

#將圖片按修改時間排序(這樣才能與圖片的描述一致),將路徑存入列表,以便後面逐個插入圖片時呼叫
import  os
path = "pictures"
list_p = [path+"\"+i for i in os.listdir(path)] #獲取圖片的檔名,並拼接完整路徑
list_p.sort(key=lambda path: os.path.getmtime(path)) #將列表中的檔案按其修改時間排序,os.path.getmtime() 函數是獲取檔案最後修改時間
list_p裡面存放的就是該資料夾下的所有圖片路徑
'pictures\z.jpg',
 'pictures\x.jpg',
 'pictures\w.jpg',
 'pictures\y.jpg',
 'pictures\orange-flowers-2471898.jpg',
 'pictures\lime-631389.jpg',
 'pictures\v.jpg',

然後匯入Image模組。for迴圈遍歷所有圖片的路徑,然後讀取圖片尺寸,x對應寬度,y對應高度。這裡的單位是畫素。壓縮圖片的關鍵引數是壓縮後的標準寬度x_s,我們Word模板中放置圖片的單元格寬度為6.25釐米。壓縮後的圖片解析度是96,畫素為230的時候,對應長度是6.1釐米。以上換算可參考連結www.gaitubao.com/tools/pixel… 。但是按230畫素的寬度壓縮後,自動填充到Word檔案中後,圖片寬度變成了8釐米,已經超過單元格的寬度了。通過偵錯,最終將標準寬度設定為165畫素,填入word中後,寬度是5.82釐米,比較適合單元格寬度。這個差異可能是換算的不精確導致。確定好標準寬度x_s後,高度y_s按照標準寬度乘上原始高寬比來確定,這樣就是保持比例壓縮,不會導致圖片變形。壓縮resize後,再儲存到新的資料夾。

#按比例縮小圖片尺寸
from PIL import Image
for infile in list_p:
    im = Image.open(infile)
    (x,y) = im.size #讀取圖片尺寸(畫素)
    x_s = 165 #定義縮小後的標準寬度 
    y_s = int(y * x_s / x) #基於標準寬度計算縮小後的高度
    out = im.resize((x_s,y_s),Image.ANTIALIAS) #改變尺寸,保持圖片高品質
    out.save('pictures_new\{}'.format(infile.split("\")[-1]))

就這樣簡單的幾步我們就得到了想要的結果把圖片壓縮成了:

壓縮前:

結果:

詳細介紹該庫

上面的介紹是不是很簡單不過它只是PIL的一個功能下面我們詳細介紹一下。

Python Imaging Library ( PIL ) 給 Python 增加了影象處理能力。

這個庫提供了廣泛的檔案格式支援,高效的內部展現,以及十分強大的影象處理能力。

讓我們看看這個庫的幾種可能用法:

1· 影象儲存

PIL 設計用於影象歸檔和影象批次處理,你可以使用它建立縮圖,轉換格式,列印圖片等等。現在的版本可以驗證和讀取大量的圖片格式。寫入有意設計為只能寫入常用的檔案格式。

2·影象顯示 現在的版本包含了 Tk PhotoImage 和 BitmapImage 介面, 以及 Windows DIB interface,這有助於在 Windows 下使用。為了方便測試,還提供了 show() 方法,可以儲存影象到磁碟並顯示。

3·影象處理 這個庫包含了基本的影象處理功能,包括點操作,使用內建折積核心過濾,色彩空間轉換。這個庫還支援更改影象大小、旋轉、自由變換。有一個直方圖方法允許你統計影象,這可以用於對比度增強和全域性統計分析。

小面我貼一下檔案的一些入門介紹:

貼檔案做翻譯的事情我就不做了大家可以自己去看看。

檔案連結:傳送門

總結

到此這篇關於使用Python批次縮放圖片的文章就介紹到這了,更多相關Python批次縮放圖片內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com