溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python怎么實(shí)現(xiàn)圖片批量壓縮

發(fā)布時(shí)間:2021-04-25 13:51:16 來(lái)源:億速云 閱讀:192 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹python怎么實(shí)現(xiàn)圖片批量壓縮,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

python的數(shù)據(jù)類型有哪些?

python的數(shù)據(jù)類型:1. 數(shù)字類型,包括int(整型)、long(長(zhǎng)整型)和float(浮點(diǎn)型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運(yùn)算,有兩個(gè)值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數(shù)據(jù)類型,集合中可以放任何數(shù)據(jù)類型。5. 元組,元組用”()”標(biāo)識(shí),內(nèi)部元素用逗號(hào)隔開(kāi)。6. 字典,字典是一種鍵值對(duì)的集合。7. 集合,集合是一個(gè)無(wú)序的、不重復(fù)的數(shù)據(jù)組合。

項(xiàng)目中大量用到圖片加載,由于圖片太大,加載速度很慢,因此需要對(duì)文件進(jìn)行統(tǒng)一壓縮

第一種

 一:安裝包

python -m pip install Pillow

二:導(dǎo)入包

from PIL import Image
import os

三:獲取圖片文件的大小

def get_size(file):
    # 獲取文件大小:KB
    size = os.path.getsize(file)
    return size / 1024

四:輸出文件夾下的文件

dir_path = r'file_path'
items = os.listdir(dir_path)

for item in items:
    # print(item)
    path = os.path.join(dir_path, item)
    print(item)

五:壓縮文件到指定大小,我期望的是150KB,step和quality可以修改到最合適的數(shù)值

def compress_image(infile, outfile=None, mb=150, step=10, quality=80):
    """不改變圖片尺寸壓縮到指定大小
    :param infile: 壓縮源文件
    :param outfile: 壓縮文件保存地址
    :param mb: 壓縮目標(biāo),KB
    :param step: 每次調(diào)整的壓縮比率
    :param quality: 初始?jí)嚎s比率
    :return: 壓縮文件地址,壓縮文件大小
    """
    if outfile is None:
        outfile = infile
    o_size = get_size(infile)
    if o_size <= mb:
        im = Image.open(infile)
        im.save(outfile)

    while o_size > mb:
        im = Image.open(infile)
        im.save(outfile, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = get_size(outfile)

六:修改圖片尺寸,如果同時(shí)有修改尺寸和大小的需要,可以先修改尺寸,再壓縮大小

def resize_image(infile, outfile='', x_s=800):
    """修改圖片尺寸
    :param infile: 圖片源文件
    :param outfile: 重設(shè)尺寸文件保存地址
    :param x_s: 設(shè)置的寬度
    :return:
    """
    im = Image.open(infile)
    x, y = im.size
    y_s = int(y * x_s / x)
    out = im.resize((x_s, y_s), Image.ANTIALIAS)

    out.save(outfile)

七:運(yùn)行程序

if __name__ == '__main__':
                      # 源路徑      # 壓縮后路徑
    compress_image(r"file_path", r"E:\docs\2.JPG")
                    # 源路徑      # 壓縮后路徑
    resize_image(r"file_path", r"E:\docs\3.JPG")

第二種

import os
from PIL import Image
import threading,time

def imgToProgressive(path):
    if not path.split('.')[-1:][0] in ['png','jpg','jpeg']:  #if path isn't a image file,return
        return
    if os.path.isdir(path):
        return
##########transform img to progressive
    img = Image.open(path)
    destination = path.split('.')[:-1][0]+'_destination.'+path.split('.')[-1:][0]
    try:
        print(path.split('\\')[-1:][0],'開(kāi)始轉(zhuǎn)換圖片')
        img.save(destination, "JPEG", quality=80, optimize=True, progressive=True) #轉(zhuǎn)換就是直接另存為
        print(path.split('\\')[-1:][0],'轉(zhuǎn)換完畢')
    except IOError:
        PIL.ImageFile.MAXBLOCK = img.size[0] * img.size[1]
        img.save(destination, "JPEG", quality=80, optimize=True, progressive=True)
        print(path.split('\\')[-1:][0],'轉(zhuǎn)換完畢')
    print('開(kāi)始重命名文件')
    os.remove(path)
    os.rename(destination,path)

for d,_,fl in os.walk(os.getcwd()):    #遍歷目錄下所有文件
    for f in fl:
        try:
            imgToProgressive(d+'\\'+f)
        except:
            pass

以上是“python怎么實(shí)現(xiàn)圖片批量壓縮”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI