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 专题二 条件语句和循环语句的基础知识
Mar 19 Python
python处理按钮消息的实例详解
Jul 11 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
python如何定义带参数的装饰器
Mar 20 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 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的中问验证码
2006/11/25 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
php判断linux下程序问题实例
2015/07/09 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
javascript实现微信分享
2014/12/23 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python 通过exifread读取照片信息
2020/12/24 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
工作中的自我评价如何写好
2013/10/28 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
2014年团支书工作总结
2014/11/14 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技