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使用urllib2模块实现断点续传下载的方法
Jun 17 Python
Python base64编码解码实例
Jun 21 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
Python中的Django基本命令实例详解
Jul 15 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Python检测数据类型的方法总结
May 20 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
Python中类似于jquery的pyquery库用法分析
Dec 02 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
Python 数据可视化之Seaborn详解
Nov 02 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
vue组件横向树实现代码
2018/08/02 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
python后端接收前端回传的文件方法
2019/01/02 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python ini文件常用操作方法解析
2020/04/26 Python
keras之权重初始化方式
2020/05/21 Python
什么是python的id函数
2020/06/11 Python
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
化学教师教学反思
2014/01/17 职场文书
销售冠军获奖感言
2014/02/03 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
解决numpy和torch数据类型转化的问题
2021/05/23 Python
python实现股票历史数据可视化分析案例
2021/06/10 Python
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers