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练习程序批量修改文件名
Jan 16 Python
Python计算三维矢量幅度的方法
Jun 15 Python
详解Django通用视图中的函数包装
Jul 21 Python
Python生成随机验证码的两种方法
Dec 22 Python
利用python将图片转换成excel文档格式
Dec 30 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
python打包成so文件过程解析
Sep 28 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
Python和Bash结合在一起的方法
Nov 13 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 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
图象函数中的中文显示
2006/10/09 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
PHP积分兑换接口实例
2015/02/09 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
党员承诺书内容
2014/03/26 职场文书
服务承诺书格式
2014/05/21 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python