欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python暢玩os模塊以及順便批量修改圖片尺寸

 更新時(shí)間:2023年08月22日 14:30:22   作者:愿此后再無WA  
這篇文章主要介紹了python暢玩os模塊以及順便批量修改圖片尺寸方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

最近gif做不了,找了很久終于發(fā)現(xiàn)了原因。

原來是!圖 片 尺 寸 沒 有 統(tǒng) 一!

說了也奇怪,之前制作的好好的現(xiàn)在突然就說要尺寸一致才行,那沒辦法了,只好從了。

誰叫他功能強(qiáng)呢?(這個(gè)軟件叫ScreenToGif,在制作gif方面確實(shí)沒的說。)

之前截圖雖然有參考線,但畢竟也是手動(dòng)截圖的,所以還是會(huì)有一點(diǎn)點(diǎn)偏差。于是百度了諸多方法,都說用什么photoshop能批量修改圖片尺寸,結(jié)果不還是要一個(gè)一個(gè)去點(diǎn)呢?

后知后覺,python功能這么強(qiáng)大,有難得倒python的嗎?

身為python愛好者,必須用python搞起來!

修改圖片用到的模塊是PIL,而在修改圖片的過程中OS模塊起到非常重要的作用。OS模塊相當(dāng)于跑腿的,找到好看點(diǎn)的木頭送給雕工師傅雕刻,而雕工師傅就是PIL了,OS模塊就是讓雕工師傅發(fā)現(xiàn)合適木頭。哎,與其說師傅與木頭,不如說伯樂和千里馬吧,哈哈哈..

文章介紹

在批量修改圖片尺寸的過程中,我們需要用到OS模塊諸多方法。

因此,在這里我以實(shí)現(xiàn)修改圖片尺寸為目標(biāo),著重講解一下OS模塊如何運(yùn)用到實(shí)際需求中。

OS模塊

簡介

os(operating system)模塊是提供各種 Python 程序與操作系統(tǒng)進(jìn)行交互的接口。

常用功能

  • 獲取信息:OS模塊能獲取路徑,目錄名,文件名。
  • 修改信息:OS模塊能添加路徑,創(chuàng)建目錄,更改目錄名/文件名, 刪除目錄,刪除文件

(典型的增刪改查)

▲(附)os.path

os下面有個(gè)比較常用的path模塊,這模塊的能幫助你更好的處理文件。它有什么作用呢?

1.判斷

abspath表示返回絕對(duì)路徑。

  • 判斷路徑是否存在
os.path.exists(abspath)
  • 判斷是否是文件/目錄 (當(dāng)路徑存在時(shí)才進(jìn)行判斷,否則返回False)
os.path.isdir(abspath) / os.path.isfile(abspath)

2.提供標(biāo)準(zhǔn)格式的字符串。

以下操作均不考慮路徑/名稱是否有效,只是單純提供處理過的字符串。

  • 將多個(gè)路徑合并成一個(gè)路徑。
?os.path.join(A,B[,..])

AB均表示路徑。該函數(shù)相當(dāng)于

?r"\\".join((A,B)) ?# 此處必須兩個(gè)括號(hào),第一個(gè)括號(hào)表示join方法,第二個(gè)括號(hào)表示元組

當(dāng)給的路徑出現(xiàn)多個(gè)盤符時(shí)(不合法路徑),取最后一個(gè)盤符之后的路徑。、

  • 提供絕對(duì)路徑。
os.path.abspath(path)

默認(rèn)是返回你工作目錄加上你傳進(jìn)去的路徑。

  • 返回最底層文件/目錄名 或 除最底層文件/目錄的目錄。
# 返回文件/目錄名
>>> print(os.path.basename("lishuaige//jiu//shi//shuai//ya"))  
ya
# 返回文件/目錄名的目錄
>>> print(os.path.dirname("lishuaige//jiu//shi//shuai//ya"))  
lishuaige//jiu//shi//shuai

 os.path模塊終究只能用來看,真正能對(duì)文件修改的還是OS模塊。

創(chuàng)建/刪除 目錄/文件

1.創(chuàng)建  目錄(Create directory)/ 文件

os.mkdir(abspath)  # 創(chuàng)建一層目錄
os.makedirs(abspath)  # 創(chuàng)建多層目錄需要用makedirs否則會(huì)報(bào)錯(cuò)。

而創(chuàng)建文件是使用常規(guī)的with open方法,注意,創(chuàng)建文件時(shí)的文件目錄必須已存在,否則會(huì)報(bào)錯(cuò)

with open(r'C:\Users\17591\Desktop\c.txt', 'w+') as fp:
     fp.write("lishuaige")

2.刪除目錄

os.removedirs(abspath)  # 遞歸刪除空目錄也只能刪除空目錄,否則會(huì)報(bào)錯(cuò) 

注意:刪除是自深向淺刪除直到遇到空文件停止。

os.rmdir(abspath)  # 刪除一個(gè)目錄

3.刪除文件

os.remove(abspath)? # 刪除的必須是文件而不是目錄,否則會(huì)報(bào)錯(cuò)

更改 目錄/文件 名/位置

無論是文件還是目錄,都是使用os.rename方法進(jìn)行改名。

這命令不僅能改名,還能將文件/目錄移動(dòng)到其他位置(前提是這個(gè)位置的上一層目錄已經(jīng)存在)。

os.rename(原絕對(duì)路徑,新絕對(duì)路徑)

▲獲取 路徑/目錄/文件 名

1.獲取指定路徑下的目錄和文件名

os.listdir(abspath)

返回一個(gè)列表,文件名與目錄名都在里面。

2.★os.walk函數(shù)

這個(gè)函數(shù)功能強(qiáng)大的不行,就像它名字一樣,隨便逛隨便看os系統(tǒng)信息,因此它的作用是能遞歸地獲取目錄下的所有信息(路徑/目錄/文件名)。(它借助了os.listdir函數(shù))

批量處理圖片尺寸

了解OS模塊之后我們就要開始干正事了。

實(shí)現(xiàn)思路

首先要新建一個(gè)目錄用于存放修改后的圖片。我們的目的是統(tǒng)一圖片尺寸,因?yàn)槲覀兠繌垐D片的大小都比較接近,所以我們以第一張圖片的大小作為標(biāo)準(zhǔn),將其余圖片的大小設(shè)置成第一張圖片的尺寸。然后保存到新建的目錄當(dāng)中。

(在圖片大小與修改后的大小不一致的情況下,原圖會(huì)經(jīng)過一定比例放大或縮小得到修改后的圖片,因此無需擔(dān)心圖片內(nèi)容的丟失。)

注意:如果傳入的路徑存在多個(gè)圖片文件夾,我們希望在每個(gè)存有圖片的文件夾里面都新建一個(gè)文件夾來存放修改后的圖片。

詳細(xì)步驟

安裝PIL庫

進(jìn)入pycharm的terminal 或 cmd命令行

輸入

pip install pillow

 即可完成安裝PIL庫。

創(chuàng)建文件夾

我們需要?jiǎng)?chuàng)建一個(gè)文件夾用來保存修改后的圖片。如果這個(gè)文件夾已經(jīng)存在的話,我們需要?jiǎng)h除里面的文件。怎么刪除?第一個(gè)方法是使用shutil的rmtree函數(shù)刪除整個(gè)文件夾后再使用os.mkdir函數(shù)創(chuàng)個(gè)新的,第二個(gè)方法是使用我們os.walk函數(shù)逐步刪除里面所有文件,但這樣比較繁瑣,如果遇到多個(gè)目錄的時(shí)候刪起來就難受了,所以還是用rmtree刪除實(shí)在些。

因此我們定義一個(gè)創(chuàng)建文件夾作為輸出路徑的方法。

在遇到第一張圖片時(shí)所在的目錄創(chuàng)建(可能會(huì)在不同目錄創(chuàng)建,取決于你傳入的路徑含有的圖片文件夾。每存在一個(gè)圖片文件夾就會(huì)在里面創(chuàng)建一個(gè)存放修改后圖片的文件夾)

# 如果已存在文件夾則清空文件,否則創(chuàng)建一個(gè)新的
def initialize_folder(output_folder):
    print("初始化..")
    if os.path.exists(output_folder):
        shutil.rmtree(output_folder)
    os.mkdir(output_folder)
    print("初始化文件夾 %s 成功!" % (output_folder.split(os.sep)[-1]))

批量處理

我們使用os.walk遍歷圖片文件夾,如果文件是圖片的格式的話,我們獲取他的文件路徑并確定導(dǎo)出路徑。如果是第一張圖片的話我們還需要初始化文件夾,以及獲取圖片尺寸。最后將圖片尺寸,路徑和保存路徑交給PIL模塊處理。最后給出些人性化提示。

# path: 圖片文件夾路徑  fname: 保存修改文件的目錄名
def file_handling(path, fname):
    for dir_path, listdir, files in os.walk(path):
        # 根據(jù)目錄路徑獲取目錄名 os.sep表示分割符
        dir_name = dir_path.split(os.sep)[-1]
        # 如果此時(shí)的目錄跟保存路徑一致,那么需要跳過
        if dir_name == fname:
            continue
        print("正在處理 %s 文件夾文件..\n" % dir_name)
        # 設(shè)置進(jìn)度
        rate = 1
        # 記錄總數(shù)
        c = len(files)
        for file in files:
            # 如果后綴名不是圖片格式則需要跳過
            if file.split('.')[-1].lower() not in "pngjpgjpeg":
                continue
            # 文件路徑
            file_path = os.path.join(dir_path, file)
            # 保存路徑
            export_path = os.path.join(dir_path, fname, file)
            if rate == 1:
                # 初始化文件夾  用于存放修改后的圖片
                initialize_folder(os.path.join(dir_path, fname))
                img = Image.open(file_path)
                width = img.size[0]
                height = img.size[1]
            # 交給雕工師傅
            resize_image(file_path, export_path, width, height)
            print("已完成 {:.2f} %\t{:d}個(gè)文件".format(rate / c * 100, rate))
            rate += 1
    print("保存成功!")

修改圖片尺寸

三步走戰(zhàn)略:打開->修改->保存。

我們修改圖片尺寸使用的是PIL下面的Image模塊的方法,需要提前導(dǎo)入。

from PIL import Image

最后使用resize方法修改大小即可,resize顧名思義,修改尺寸。

# 修改圖片大小
def resize_image(file_path, export_path, width, height):
    img = Image.open(file_path)
    # Image.ANTIALIAS:抗鋸齒,提高圖片質(zhì)量
    r = img.resize((width, height), Image.ANTIALIAS)
    r.save(export_path)

主函數(shù)

作為函數(shù)的入口需要確定圖片路徑及目錄名,然后調(diào)用以上方法。

if __name__ == '__main__':
    # 獲取存放圖片總路徑
    path = r'%s' % (input("請(qǐng)將您的存放圖片的路徑復(fù)制于此:"))
    # 指定輸出文件夾名
    fname = r'lishuaige'
    file_handling(path, fname)

完整代碼

from PIL import Image
import os
import shutil
# 修改圖片大小
def resize_image(file_path, export_path, width, height):
    img = Image.open(file_path)
    # Image.ANTIALIAS:抗鋸齒,提高圖片質(zhì)量
    r = img.resize((width, height), Image.ANTIALIAS)
    r.save(export_path)
# 如果已存在文件夾則清空文件,否則創(chuàng)建一個(gè)新的
def initialize_folder(output_folder):
    print("初始化..")
    if os.path.exists(output_folder):
        shutil.rmtree(output_folder)
    os.mkdir(output_folder)
    print("初始化文件夾 %s 成功!" % (output_folder.split(os.sep)[-1]))
# path: 圖片文件夾路徑  fname: 保存修改文件的目錄名
def file_handling(path, fname):
    for dir_path, listdir, files in os.walk(path):
        # 根據(jù)目錄路徑獲取目錄名 os.sep表示分割符
        dir_name = dir_path.split(os.sep)[-1]
        # 如果此時(shí)的目錄跟保存路徑一致,那么需要跳過
        if dir_name == fname:
            continue
        print("正在處理 %s 文件夾文件..\n" % dir_name)
        # 設(shè)置進(jìn)度
        rate = 1
        # 記錄總數(shù)
        c = len(files)
        for file in files:
            # 如果后綴名不是圖片格式則需要跳過
            if file.split('.')[-1].lower() not in "pngjpgjpeg":
                continue
            # 文件路徑
            file_path = os.path.join(dir_path, file)
            # 保存路徑
            export_path = os.path.join(dir_path, fname, file)
            if rate == 1:
                # 初始化文件夾  用于存放修改后的圖片
                initialize_folder(os.path.join(dir_path, fname))
                img = Image.open(file_path)
                width = img.size[0]
                height = img.size[1]
            # 交給雕工師傅
            resize_image(file_path, export_path, width, height)
            print("已完成 {:.2f} %\t{:d}個(gè)文件".format(rate / c * 100, rate))
            rate += 1
    print("保存成功!")
if __name__ == '__main__':
    # 獲取存放圖片總路徑
    path = r'%s' % (input("請(qǐng)將您的存放圖片的路徑復(fù)制于此:"))
    # 指定輸出文件夾名
    fname = r'lishuaige'
    file_handling(path, fname)
 

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python自動(dòng)化辦公操作PPT的實(shí)現(xiàn)

    python自動(dòng)化辦公操作PPT的實(shí)現(xiàn)

    這篇文章主要介紹了python自動(dòng)化辦公操作PPT的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python灰色預(yù)測(cè)法的具體使用

    python灰色預(yù)測(cè)法的具體使用

    灰色系統(tǒng)理論認(rèn)為對(duì)既含有已知信息又含有未知或非確定信息的系統(tǒng)進(jìn)行預(yù)測(cè),本文就介紹了python灰色預(yù)測(cè)法的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-03-03
  • Python 多繼承中的一個(gè)詭異現(xiàn)象 既是 Father又是grandfather

    Python 多繼承中的一個(gè)詭異現(xiàn)象 既是 Father又是grandfather

    我們知道,在面向?qū)ο缶幊汤锩?,繼承是一個(gè)很重要的概念。子類可以使用父類的方法和屬性,接下來小編將用舉例的方式為大家講解Python 多繼承中的一個(gè)詭異現(xiàn)象 其即是爸爸又是爺爺?shù)钠孑猬F(xiàn)象,感興趣的小伙伴可以看下面文章具體了解
    2021-09-09
  • python調(diào)用百度語音識(shí)別實(shí)現(xiàn)大音頻文件語音識(shí)別功能

    python調(diào)用百度語音識(shí)別實(shí)現(xiàn)大音頻文件語音識(shí)別功能

    這篇文章主要為大家詳細(xì)介紹了python調(diào)用百度語音識(shí)別實(shí)現(xiàn)大音頻文件語音識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python解決pandas處理缺失值為空字符串的問題

    python解決pandas處理缺失值為空字符串的問題

    下面小編就為大家分享一篇python解決pandas處理缺失值為空字符串的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python及Pycharm安裝方法圖文教程

    Python及Pycharm安裝方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Python及Pycharm安裝方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 如何用python繪制散點(diǎn)圖

    如何用python繪制散點(diǎn)圖

    這篇文章主要介紹了如何用python繪制散點(diǎn)圖問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 利用python發(fā)送和接收郵件

    利用python發(fā)送和接收郵件

    這篇文章主要為大家詳細(xì)介紹了如何利用python發(fā)送和接收郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • python繪制直線的方法

    python繪制直線的方法

    這篇文章主要為大家詳細(xì)介紹了python繪制直線的方法,繪制直線通用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • python通配符之glob模塊的使用詳解

    python通配符之glob模塊的使用詳解

    這篇文章主要介紹了python通配符之glob模塊的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評(píng)論