python实现图片批量压缩程序


Posted in Python onJuly 23, 2018

 本文实例为大家分享了python实现图片批量压缩程序的具体代码,供大家参考,具体内容如下

说明

  • 运行环境:Win10 Pycharm
  • 程序没有用到面向对象编程方法,只是简单的面向过程设计
  • 用到的模块:PIL、os、sys
  • 使用方法: 在Pycharm的terminal中输入”python xxx.py source_dir dest_dir”就可以把source_dir中的图片文件进行压缩并保存到dest_dir中

源码

from PIL import Image
import os
import sys

# 定义可以识别的图片文件类型,可以自行扩充
valid_file_type = ['.jpg', '.png']
# 定义压缩比,数值越大,压缩越小
SIZE_normal = 1.0
SIZE_small = 1.5
SIZE_more_small = 2.0


def make_directory(directory):
  """创建目录"""
  os.makedirs(directory)


def directory_exists(directory):
  """判断目录是否存在"""
  if os.path.exists(directory):
    return True
  else:
    return False


def list_img_file(directory):
  """列出目录下所有文件,并筛选出图片文件列表返回"""
  old_list = os.listdir(directory)
  # print old_list
  new_list = []
  for filename in old_list:
    if os.path.isfile(filename):
      f, e = os.path.splitext(filename)
      if e in valid_file_type:
        new_list.append(filename)
      else:
        pass
    else:
      pass
  # print new_list
  return new_list


def print_help():
  print """
  This program helps compress many image files
  you can choose which scale you want to compress your img(jpg/png/etc)
  1) normal compress(4M to 1M around)
  2) small compress(4M to 500K around)
  3) smaller compress(4M to 300K around)
  """


def compress(choose, des_dir, file_list):
  """压缩算法,img.thumbnail对图片进行压缩,还可以改变宽高数值进行压缩"""
  if choose == '1':
    scale = SIZE_normal
  if choose == '2':
    scale = SIZE_small
  if choose == '3':
    scale = SIZE_more_small
  for infile in file_list:
    img = Image.open(infile)
    # size_of_file = os.path.getsize(infile)
    w, h = img.size
    img.thumbnail((int(w/scale), int(h/scale)))
    img.save(des_dir + '/' + infile)


if __name__ == "__main__":
  src_dir, des_dir = sys.argv[1], sys.argv[2]
  if directory_exists(src_dir):
    if not directory_exists(des_dir):
      make_directory(des_dir)
    # business logic
    file_list = list_img_file(src_dir)
    # print file_list
    if file_list:
      print_help()
      choose = raw_input("enter your choice:")
      compress(choose, des_dir, file_list)
    else:
      pass
  else:
    print "source directory not exist!"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
Python网络编程详解
Oct 31 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
修改python plot折线图的坐标轴刻度方法
Dec 13 Python
python处理“
Jun 10 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Python requests获取网页常用方法解析
Feb 20 Python
python自动点赞功能的实现思路
Feb 26 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
python中的插值 scipy-interp的实现代码
Jul 23 #Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 #Python
python中的turtle库函数简单使用教程
Jul 23 #Python
Flask框架配置与调试操作示例
Jul 23 #Python
python实现时间o(1)的最小栈的实例代码
Jul 23 #Python
Flask框架Flask-Principal基本用法实例分析
Jul 23 #Python
Flask框架Flask-Login用法分析
Jul 23 #Python
You might like
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
JQuery动画和停止动画实例代码
2013/03/01 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
JointJS流程图的绘制方法
2018/12/03 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
线程和进程的区别及Python代码实例
2015/02/04 Python
python实现比较文件内容异同
2018/06/22 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
python怎么删除缓存文件
2020/07/19 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
Servlet如何得到服务器的信息
2015/12/22 面试题
工程学毕业生自荐信
2014/06/14 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
MySQL慢查询优化解决问题
2022/03/17 MySQL
APP界面设计技巧和注意事项
2022/04/29 杂记
Django框架之路由用法
2022/06/10 Python