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实现压缩图片到2M -> 正文阅读

[Python知识库]Python实现压缩图片到2M

最近疫情反复,堂姐被抽调到宣传部门发些稿件,发布平台总是要求图片上传必须为2M以下,堂姐是个电脑盲,刚好最近在看入门Python的文章,写个压缩同目录下图片到2M的程序给她,她只要把程序放到有图片的文件夹里运行就好了。我在这里记录分享下制作过程。

打开PyCharm或者VScode,写下如下代码:

(大概思路就是先找当前文件夹下有没有图片格式的文件,有的话就取出文件路径,然后按比例和质量循环不断压缩它,直到它小于2M大小,然后就创建个压缩后图片的文件夹,把压缩好的图片放进去,如果图片本身就小于2M那么就直接放到压缩后图片文件夹,这样压缩完直接把压缩后图片文件夹拷走就行了。)

import shutil
from PIL import Image
import os
from PIL.Image import Resampling

# 尺寸比例
size_ratio = 0.9
# 压缩质量
quality = 90


# 遍历文件夹压缩
def batch_compress(src_path, dist_path):
    # 遍历文件夹
    for filename in os.listdir(src_path):
        # 目录验证
        if not os.path.exists(dist_path):
            os.makedirs(dist_path)

        # 拼接完整的文件或文件夹路径
        src_file = os.path.join(src_path, filename)
        dist_file = os.path.join(dist_path, filename)

        # 如果是文件 就调用压缩
        if os.path.isfile(src_file):
            if is_image(src_file):
                # 执行压缩操作
                compression(src_file, dist_file)
            else:
                print(dist_file + " 文件不是图片,跳过!")
        # 如果是文件夹 就继续递归
        elif os.path.isdir(src_file):
            batch_compress(src_file, dist_file)


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


# 文件是否为图片判断
def is_image(src_file):
    if (src_file.lower().endswith(
            ('.bmp', '.dib', '.gif', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff'))):
        return True
    else:
        return False


# 压缩图片并保存
def compression(src_file, dist_file):
    try:
        # 读取原图
        src_img = Image.open(src_file)
        w, h = src_img.size
        # 重新设置图片尺寸和选项,Image.ANTIALIAS:平滑抗锯齿
        # dist_img = src_img.resize((int(w * size_ratio), int(h * size_ratio)), Image.ANTIALIAS)
        o_size = get_size(src_file)
        msg = False
        if o_size <= 2048:
            shutil.copy(src_file, dist_file)
            print(dist_file + " 无需压缩!")
        while o_size > 2048:
            dist_img = src_img.resize((int(w * size_ratio), int(h * size_ratio)), Resampling.LANCZOS)
            # 保存为新图
            dist_img.save(dist_file, quality=quality)
            src_img = Image.open(dist_file)
            w, h = src_img.size
            o_size = get_size(dist_file)
            msg = True
        if msg:
            print(dist_file + " 压缩成功!")
    except Exception as e:
        print(dist_file + " 压缩失败!异常信息:", e)


if __name__ == '__main__':
    print("=================开始执行=================")
    # 指定图片目录以及压缩后的图片目录
    infile = os.getcwd()
    outfile = os.path.join(infile, '压缩后图片')
    batch_compress(infile, outfile)
    print("=================执行结束=================")

源代码运行测试没问题,下面就是打包成可执行的程序,堂姐主要用windows系统办公,那么打包成exe可执行程序就可以了。

打包方式有多种,这里我选择pyinstaller

用pip装它(你电脑没有pip?进它官网下载去吧您訥:)pip · PyPIThe PyPA recommended tool for installing Python packages.https://pypi.org/project/pip/

装完您就打开cmd程序,运行

pip install pyinstaller

?装完您看它结尾处显示Successfully,那就是装上了;

然后您去网上找个您喜欢的ico格式的图片文件,放到py文件所在的目录,就可以开始打包了。

打开cmd,切换到py项目所在目录,运行如下命令(这里“ico.ico”是我找的图标文件,piczip.py是我的python文件)

pyinstaller -F -i ico.ico piczip.py

然后您就得到一个带着您选择图标的exe文件,把它放到您想批量压缩图片的文件夹里,双击就可以了。

不愿意搭建环境,只需要可执行程序的看这里:

压缩图片到2M.exe

?

  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:32:35 
 
开发: 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:23:24-

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