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下的Mysql模块MySQLdb安装详解
Apr 09 Python
Python中的jquery PyQuery库使用小结
May 13 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
python如何爬取个性签名
Jun 19 Python
python中实现字符串翻转的方法
Jul 11 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
PyCharm如何导入python项目的方法
Feb 06 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
PHP 类与构造函数解析
2017/02/06 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
Vue $attrs & inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
python实现K最近邻算法
2018/01/29 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
会计专业大学生求职信范文
2014/01/28 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
个人借款协议书范本
2014/11/17 职场文书
催款函范文
2015/06/24 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript