使用Python輕松批量壓縮圖片

在互聯(lián)網(wǎng),圖片的大小對一個網(wǎng)站的響應(yīng)速度有著明顯的影響,因此在提供用戶預(yù)覽的時候,圖片往往是使用壓縮后的。如果一個網(wǎng)站圖片較多,一張張壓縮顯然很浪費時間。那么接下來,我就跟大家分享一個批量壓縮圖片的方法,只需幾行python代碼,即可輕松實現(xiàn)圖片壓縮。

查看原文

image

壓縮算法

用到PIL庫,PIL是Python平臺事實上的圖像處理標準庫,支持多種格式,并提供強大的圖形與圖像處理功能。使用如下命令安裝:

pip install pillow

代碼如下:

#圖片壓縮批處理
def compressImage(srcPath,dstPath):
    for filename in os.listdir(srcPath):
        #如果不存在目的目錄則創(chuàng)建一個,保持層級結(jié)構(gòu)
        if not os.path.exists(dstPath):
                os.makedirs(dstPath)
 
        #拼接完整的文件或文件夾路徑
        srcFile=os.path.join(srcPath,filename)
        dstFile=os.path.join(dstPath,filename)
 
        # 如果是文件就處理
        if os.path.isfile(srcFile):
            try:
                #打開原圖片縮小后保存,可以用if srcFile.endswith(".jpg")或者split,splitext等函數(shù)等針對特定文件壓縮
                sImg=Image.open(srcFile)
                w,h=sImg.size
                dImg=sImg.resize((int(w/2),int(h/2)),Image.ANTIALIAS)  #設(shè)置壓縮尺寸和選項,注意尺寸要用括號
                dImg.save(dstFile) #也可以用srcFile原路徑保存,或者更改后綴保存,save這個函數(shù)后面可以加壓縮編碼選項JPEG之類的
                print (dstFile+" 成功!")
            except Exception:
                print(dstFile+"失敗!")
 
        # 如果是文件夾就遞歸
        if os.path.isdir(srcFile):
            compressImage(srcFile, dstFile)

方法調(diào)用

1.在該python文件所在目錄新建三個目錄,prepare(存放待壓縮圖片)、finish(壓縮完成的原圖)和compress(存放壓縮后的圖片)
2.遍歷prepare目錄,將圖片移動到finish目錄
3.遍歷compress目錄刪除壓縮圖片
4.將finish中的圖片全部進行壓縮,對應(yīng)存到compress目錄

if __name__ == '__main__':
    # 遍歷待加入圖片
    path = os.walk("./prepare")
    for root, dirs, files in path:
        for f in files: 
            shutil.move(os.path.join(root,f),os.path.join('./finish',f))                #移動文件

    # 遍歷刪除壓縮圖片
    path = os.walk("./compress")
    for root, dirs, files in path:
        for f in files:
            os.remove(os.path.join(root, f))

    # 壓縮圖片
    compressImage("./finish","./compress")

完整代碼

新建photo.py,復(fù)制如下代碼

from PIL import Image
import os,shutil

#圖片壓縮批處理
def compressImage(srcPath,dstPath):
    for filename in os.listdir(srcPath):
        #如果不存在目的目錄則創(chuàng)建一個,保持層級結(jié)構(gòu)
        if not os.path.exists(dstPath):
                os.makedirs(dstPath)
 
        #拼接完整的文件或文件夾路徑
        srcFile=os.path.join(srcPath,filename)
        dstFile=os.path.join(dstPath,filename)
 
        # 如果是文件就處理
        if os.path.isfile(srcFile):
            try:
                #打開原圖片縮小后保存,可以用if srcFile.endswith(".jpg")或者split,splitext等函數(shù)等針對特定文件壓縮
                sImg=Image.open(srcFile)
                w,h=sImg.size
                dImg=sImg.resize((int(w/2),int(h/2)),Image.ANTIALIAS)  #設(shè)置壓縮尺寸和選項,注意尺寸要用括號
                dImg.save(dstFile) #也可以用srcFile原路徑保存,或者更改后綴保存,save這個函數(shù)后面可以加壓縮編碼選項JPEG之類的
                print (dstFile+" 成功!")
            except Exception:
                print(dstFile+"失?。?)
 
        # 如果是文件夾就遞歸
        if os.path.isdir(srcFile):
            compressImage(srcFile, dstFile)

if __name__ == '__main__':
    # 遍歷待加入圖片
    path = os.walk("./prepare")
    for root, dirs, files in path:
        for f in files: 
            shutil.move(os.path.join(root,f),os.path.join('./finish',f))                #移動文件

    # 遍歷刪除壓縮圖片
    path = os.walk("./compress")
    for root, dirs, files in path:
        for f in files:
            os.remove(os.path.join(root, f))

    # 遍歷壓縮圖片
    compressImage("./finish","./compress")

最后,大家只要把要壓縮的圖片放入prepare目錄,然后執(zhí)行photo.py即可。

源代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文一步步為你介紹,如何用Python自動判斷多張圖片中哪些超出閾值需要壓縮,且保持寬高比。如果你想了解Pytho...
    王樹義閱讀 6,900評論 7 38
  • 前言 最近在博客中做了一個相冊功能,但是問題是我的圖片都很大,用圖片壓縮工具壓縮了一遍感覺不是很方便,于是就搜了一...
    51reboot閱讀 1,182評論 0 1
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 3,129評論 1 3
  • 現(xiàn)在用的手機是360出的,用了一年,現(xiàn)在用起來特別卡,我加載一個小程序總是卡在那里不動,后臺運行3個軟件更卡,點都...
    抱著幸福閱讀 209評論 0 1
  • 痛苦的昨天終于過去了,而我在那樣的情況下,忍住了,堅持了下來。不管未來如何,此刻,只是不能失去。 昨天幾乎一天沒有...
    cicyly閱讀 154評論 0 1

友情鏈接更多精彩內(nèi)容