IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python压缩图片 指定大小 -> 正文阅读

[Python知识库]python压缩图片 指定大小

?????????将某个目录下的所有图片文件压缩至另一文件夹,指定压缩后的最大文件大小,指定宽度,自适应高度进行压缩,压缩失败的文件提示后直接拷贝原始图片至压缩文件夹。

import os
import shutil
from PIL import Image


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


def get_outfile(infile, outfile):
    if outfile:
        return outfile
    dir, suffix = os.path.splitext(infile)
    outfile = '{}-out{}'.format(dir, suffix)
    return outfile

#mb输出图片最大大小KB,x_s输出图片的宽度,高自适应
def compress_image(infile, outfile='', mb=300, step=10, quality=85,x_s=900):
    o_size = get_size(infile)
    # print("imageSize",o_size)
    outfile = get_outfile(infile, outfile)
    if o_size <= mb:
        im = Image.open(infile)
        im.save(outfile, quality=100)
        return infile,get_size(infile)

    while o_size > mb:
        im = Image.open(infile)
        width, height = im.size
        y_s = int(height*x_s/width)
        # width, height = round(width * 0.8), round(height * 0.8)
        im = im.resize((x_s, y_s), Image.ANTIALIAS)
        im.save(outfile,  optimize=True, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = get_size(outfile)
    return outfile, get_size(outfile)


def compressImage(srcpath, dstpath):
    for filename in os.listdir(srcpath):
        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) and (
                filename.upper().endswith('.JPG') or filename.upper().endswith('.BMP')
                or filename.upper().endswith('.PNG')
                or filename.upper().endswith('.GIF')
                or filename.upper().endswith('.JPEG')
        )):
            try:
                outfile,size = compress_image(srcfile, dstfile)
                # print(dstfile + "   success! ",size)
            except Exception as re:
                print(dstfile + "   error!")
                print(re)
                try:
                    shutil.copyfile(srcfile, dstfile)  # 压缩失败将原始文件复制过来
                except Exception as r:
                    print("copy error: ",re)
        if os.path.isdir(srcfile):
            compressImage(srcfile, dstfile)


pwd = os.getcwd() #获取脚本所在目录
print("pwd:", pwd)
srcPath = os.path.join(pwd, "pic\\2022")  # 图片所在目录
print("srcPath:", srcPath)
dstPath = os.path.join(pwd, "pic\\2022"+"_copy") # 压缩后的图片存放目录
print("target:", dstPath)
compressImage(srcPath, dstPath) # 运行压缩

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:32:27  更:2022-04-22 18:35:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:41:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码