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时返回字典结构的代码
Jun 18 Python
Python爬虫框架Scrapy安装使用步骤
Apr 01 Python
Python中index()和seek()的用法(详解)
Apr 27 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
Python延时操作实现方法示例
Aug 14 Python
python 标准差计算的实现(std)
Jul 29 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
python实现xml转json文件的示例代码
Dec 30 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
python 实现定时任务的四种方式
Apr 01 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
建立动态的WML站点(二)
2006/10/09 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
Python使用django搭建web开发环境
2017/06/09 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
总监职责范文
2013/11/09 职场文书
初入社会应届生求职信
2013/11/18 职场文书
教师实习自我鉴定
2013/12/13 职场文书
初中学习计划书范文
2014/09/15 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
小鞋子观后感
2015/06/05 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js