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字符遍历的艺术
Sep 06 Python
python正则表达式抓取成语网站
Nov 20 Python
Django中使用locals()函数的技巧
Jul 16 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
python实现批量视频分帧、保存视频帧
May 31 Python
详解Python3中setuptools、Pip安装教程
Jun 18 Python
python实现串口自动触发工作的示例
Jul 02 Python
python 实现手机自动拨打电话的方法(通话压力测试)
Aug 08 Python
解决Django连接db遇到的问题
Aug 29 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
pandas抽取行列数据的几种方法
Dec 13 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
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
python生成器generator用法实例分析
2015/06/04 Python
Python面向对象程序设计示例小结
2019/01/30 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
python实现宿舍管理系统
2019/11/22 Python
python try...finally...的实现方法
2020/11/25 Python
介绍下Java的输入输出流
2014/01/22 面试题
幼儿园中秋节活动方案2013
2014/01/29 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
预备党员承诺书
2014/03/25 职场文书
中职生自荐信范文
2014/06/15 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
宇宙与人观后感
2015/06/05 职场文书
2016春季运动会前导词
2015/11/25 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js