最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用Pillow庫批量處理圖片的示例詳解

 更新時(shí)間:2026年01月06日 14:24:17   作者:軟件測(cè)試雜談  
Pillow是PIL(Python Imaging Library)的一個(gè)分支,但功能更強(qiáng)大、維護(hù)更活躍,本文將為大家介紹如何使用Pillow庫來批量處理圖片,包括調(diào)整圖片大小、添加水印和批量格式轉(zhuǎn)換,有需要的小伙伴可以了解下

大家好,今天要教大家一個(gè)超實(shí)用的技能 —— 使用Pillow庫來批量處理圖片。無論是調(diào)整圖片大小、添加水印,還是批量格式轉(zhuǎn)換,都能輕松搞定!讓我們一起進(jìn)入圖片處理的奇妙世界吧!

一、準(zhǔn)備工作

首先安裝Pillow庫:

pip install Pillow

小貼士:Pillow是PIL(Python Imaging Library)的一個(gè)分支,但功能更強(qiáng)大、維護(hù)更活躍。

二、基礎(chǔ)圖片操作

讓我們從最基本的圖片操作開始:

from PIL import Image, ImageDraw, ImageFont
import os

def basic_image_ops(image_path):
    """
    基礎(chǔ)圖片操作示例
    """
    # 打開圖片
    img = Image.open(image_path)
    
    # 獲取圖片信息
    print(f"圖片大小:{img.size}")
    print(f"圖片格式:{img.format}")
    print(f"圖片模式:{img.mode}")
    
    # 調(diào)整大小
    resized_img = img.resize((800, 600))
    
    # 旋轉(zhuǎn)圖片
    rotated_img = img.rotate(45, expand=True)
    
    # 裁剪圖片
    cropped_img = img.crop((100, 100, 500, 500))  # (左, 上, 右, 下)
    
    # 保存處理后的圖片
    resized_img.save('resized.jpg')
    rotated_img.save('rotated.jpg')
    cropped_img.save('cropped.jpg')

# 使用示例
basic_image_ops('example.jpg')

三、批量調(diào)整圖片大小

在電商工作中,經(jīng)常需要把產(chǎn)品圖片統(tǒng)一調(diào)整為特定尺寸:

def batch_resize_images(input_folder, output_folder, size=(800, 600)):
    """
    批量調(diào)整圖片大小
    :param input_folder: 輸入文件夾路徑
    :param output_folder: 輸出文件夾路徑
    :param size: 目標(biāo)尺寸(寬,高)
    """
    # 確保輸出文件夾存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 支持的圖片格式
    supported_formats = {'.jpg', '.jpeg', '.png', '.bmp'}
    
    success_count = 0
    fail_count = 0
    
    for filename in os.listdir(input_folder):
        if any(filename.lower().endswith(fmt) for fmt in supported_formats):
            try:
                # 打開圖片
                image_path = os.path.join(input_folder, filename)
                img = Image.open(image_path)
                
                # 保持縱橫比調(diào)整大小
                img.thumbnail(size, Image.Resampling.LANCZOS)
                
                # 保存處理后的圖片
                output_path = os.path.join(output_folder, filename)
                img.save(output_path, quality=95)
                
                success_count += 1
                print(f"成功處理:{filename}")
                
            except Exception as e:
                fail_count += 1
                print(f"處理失敗 - {filename}: {str(e)}")
    
    print(f"\n處理完成!成功:{success_count},失敗:{fail_count}")

# 使用示例
batch_resize_images('input_images', 'output_images', (1024, 768))

四、添加水印

保護(hù)圖片版權(quán),給圖片添加水?。?/p>

def add_watermark(image_path, watermark_text, output_path):
    """
    給圖片添加文字水印
    """
    # 打開圖片
    img = Image.open(image_path)
    
    # 創(chuàng)建繪圖對(duì)象
    draw = ImageDraw.Draw(img)
    
    # 加載字體(請(qǐng)確保字體文件存在)
    try:
        font = ImageFont.truetype('arial.ttf', 36)
    except:
        font = ImageFont.load_default()
    
    # 計(jì)算水印位置(右下角)
    text_width = draw.textlength(watermark_text, font=font)
    text_height = 36
    x = img.width - text_width - 20
    y = img.height - text_height - 20
    
    # 添加半透明文字
    draw.text(
        (x, y),
        watermark_text,
        fill=(255, 255, 255, 128),  # 白色,半透明
        font=font
    )
    
    # 保存圖片
    img.save(output_path)

# 批量添加水印
def batch_add_watermark(input_folder, output_folder, watermark_text):
    """
    批量給圖片添加水印
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, f"watermarked_{filename}")
            add_watermark(input_path, watermark_text, output_path)

五、高級(jí)技巧

1. 圖片格式轉(zhuǎn)換

def convert_format(input_path, output_format):
    """
    轉(zhuǎn)換圖片格式
    :param input_path: 輸入圖片路徑
    :param output_format: 目標(biāo)格式(如'PNG')
    """
    img = Image.open(input_path)
    
    # 如果是PNG,保持透明通道
    if output_format.upper() == 'PNG':
        if img.mode in ('RGBA', 'LA'):
            output_path = input_path.rsplit('.', 1)[0] + '.png'
            img.save(output_path, output_format)
            return
    
    # 轉(zhuǎn)換為RGB模式(去除透明通道)
    rgb_img = img.convert('RGB')
    output_path = input_path.rsplit('.', 1)[0] + '.' + output_format.lower()
    rgb_img.save(output_path, output_format)

2. 圖片優(yōu)化

def optimize_image(input_path, output_path, max_size_kb=500):
    """
    優(yōu)化圖片大小,控制在指定KB以內(nèi)
    """
    img = Image.open(input_path)
    quality = 95
    
    while True:
        img.save(output_path, quality=quality)
        size_kb = os.path.getsize(output_path) / 1024
        
        if size_kb <= max_size_kb or quality <= 5:
            break
            
        quality -= 5

    print(f"優(yōu)化完成:{size_kb:.2f}KB,質(zhì)量:{quality}")

練習(xí)小任務(wù)

嘗試實(shí)現(xiàn)以下功能:

  • 給圖片添加圖片水印
  • 批量為圖片添加邊框
  • 制作圖片縮略圖畫廊
  • 圖片色彩增強(qiáng)

實(shí)用技巧

  • 處理大量圖片時(shí)注意內(nèi)存使用
  • 保持原圖備份
  • 注意圖片質(zhì)量和文件大小的平衡
  • 使用多線程提高處理速度

小結(jié)

今天我們學(xué)習(xí)了:

  • 基礎(chǔ)圖片操作
  • 批量調(diào)整圖片大小
  • 添加水印
  • 格式轉(zhuǎn)換和優(yōu)化

掌握了這些技能,你就能輕松處理各種圖片任務(wù)了!記住,實(shí)踐出真知,多動(dòng)手試試不同的參數(shù)和效果!

到此這篇關(guān)于Python使用Pillow庫批量處理圖片的示例詳解的文章就介紹到這了,更多相關(guān)Python圖片處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 生成器和迭代器的原理解析

    python 生成器和迭代器的原理解析

    這篇文章主要介紹了python 生成器和迭代器的原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 基于python的docx模塊處理word和WPS的docx格式文件方式

    基于python的docx模塊處理word和WPS的docx格式文件方式

    今天小編就為大家分享一篇基于python的docx模塊處理word和WPS的docx格式文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 對(duì)pyqt5中QTabWidget的相關(guān)操作詳解

    對(duì)pyqt5中QTabWidget的相關(guān)操作詳解

    今天小編就為大家分享一篇對(duì)pyqt5中QTabWidget的相關(guān)操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python 三種方法提取pdf中的圖片

    python 三種方法提取pdf中的圖片

    這篇文章主要介紹了python 三種方法提取pdf中的圖片,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02
  • linux下python中文亂碼解決方案詳解

    linux下python中文亂碼解決方案詳解

    這篇文章主要介紹了linux下python中文亂碼解決方案詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • opencv python 圖像去噪的實(shí)現(xiàn)方法

    opencv python 圖像去噪的實(shí)現(xiàn)方法

    這篇文章主要介紹了opencv python 圖像去噪的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • python數(shù)據(jù)分析工具之 matplotlib詳解

    python數(shù)據(jù)分析工具之 matplotlib詳解

    對(duì)于 Python 來說,matplotlib 是最著名的繪圖庫,它主要用于二維繪圖,當(dāng)然也可以進(jìn)行簡(jiǎn)單的三維繪圖。這篇文章主要介紹了python數(shù)據(jù)分析工具之 matplotlib的相關(guān)知識(shí),需要的朋友可以參考下
    2020-04-04
  • pytorch之torch_scatter.scatter_max()用法

    pytorch之torch_scatter.scatter_max()用法

    這篇文章主要介紹了pytorch之torch_scatter.scatter_max()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python制作數(shù)據(jù)預(yù)測(cè)集成工具(值得收藏)

    Python制作數(shù)據(jù)預(yù)測(cè)集成工具(值得收藏)

    這篇文章主要介紹了Python如何制作數(shù)據(jù)預(yù)測(cè)集成工具,幫助大家進(jìn)行大數(shù)據(jù)預(yù)測(cè),感興趣的朋友可以了解下
    2020-08-08
  • Python除法保留兩位小數(shù)點(diǎn)的三種方法實(shí)現(xiàn)

    Python除法保留兩位小數(shù)點(diǎn)的三種方法實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于Python除法保留兩位小數(shù)點(diǎn)的三種方法實(shí)現(xiàn),在py應(yīng)用中有許多拿結(jié)果中的多個(gè)整數(shù)進(jìn)行運(yùn)算,難免少不了除法(如單位換算等),但是整數(shù)進(jìn)行運(yùn)算后只會(huì)返回整數(shù),一般結(jié)果基本需要精確到后兩位,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

门头沟区| 兴和县| 拉孜县| 准格尔旗| 武穴市| 六盘水市| 喜德县| 绥宁县| 准格尔旗| 娄底市| 邳州市| 铜川市| 泸溪县| 视频| 巩义市| 北宁市| 洪泽县| 衡水市| 竹山县| 名山县| 揭西县| 土默特左旗| 浮梁县| 刚察县| 青田县| 永济市| 辰溪县| 扬州市| 乌苏市| 尼勒克县| 临城县| 得荣县| 平和县| 正蓝旗| 万州区| 庄河市| 什邡市| 临汾市| 盐津县| 福建省| 城口县|