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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
Python中的self用法详解
Aug 06 Python
python日志模块logbook使用方法
Sep 19 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
基于python生成英文版词云图代码实例
May 16 Python
Python decimal模块使用方法详解
Jun 08 Python
Django+Uwsgi+Nginx如何实现生产环境部署
Jul 31 Python
Python Socket编程详解
Apr 25 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 分库分表hash算法
2009/11/12 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
帝国cms目录结构分享
2015/07/06 PHP
扩展String功能方法
2006/09/22 Javascript
用jquery来定位
2007/02/20 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
在Python程序中操作MySQL的基本方法
2015/07/29 Python
python:socket传输大文件示例
2017/01/18 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
python线性插值解析
2020/07/05 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
酒店总经理助理岗位职责
2014/02/01 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
管理标语大全
2014/06/24 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
行政处罚告知书
2015/07/01 职场文书
诚信考试主题班会
2015/08/17 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库