!/usr/bin/python
import os
import cPickle as p
import re
import Image def imageCompre(imagedir = '.', imagelistfile="image.data"): datafile = imagedir+'/'+imagelistfile
allowImageType = ['jpg','jpeg','gif','png']
pre = re.compile('^big|^sml|^mid*'); if os.path.isfile(datafile):
f = file(datafile)
imagelist = p.load(f)
f.close()
else:
imagelist = [] for item in os.listdir(imagedir):
if item:
if os.path.isdir(imagedir+"/"+item):
imageCompre(imagedir+"/"+item,'image.data')
else:
if item.split('.')[-1] in allowImageType and item not in imagelist and not pre.match(item):
imagelist.append(item);
#convert image file
convertImage(imagedir,item)
#update image.data
if imagelist:
f = file(datafile, 'w')
p.dump(imagelist, f)
f.close()
#delete imagelist tuple
del imagelist def convertImage(imagedir,item):
sourcefile = imagedir+"/"+item
im = Image.open(sourcefile); if im.size[0]<=120:
os.system("cp %s %s/big-%s -a" %(sourcefile,imagedir,item))
os.system("cp %s %s/mid-%s -a" %(sourcefile,imagedir,item))
os.system("cp %s %s/sml-%s -a" %(sourcefile,imagedir,item))
else:
if im.size[0] > 640:
os.system("convert -resize 640 %s %s/big-%s" %(sourcefile,imagedir,item))
os.system("convert -resize 400 %s %s/mid-%s" %(sourcefile,imagedir,item))
os.system("convert -resize 120 %s %s/sml-%s" %(sourcefile,imagedir,item))
elif 400 < im.size[0] <= 640:
os.system("cp %s %s/big-%s -a" %(sourcefile,imagedir,item))
os.system("convert -resize 400 %s %s/mid-%s" %(sourcefile,imagedir,item))
os.system("convert -resize 120 %s %s/sml-%s" %(sourcefile,imagedir,item))
elif 120 < im.size[0] <= 400:
os.system("cp %s %s/big-%s -a" %(sourcefile,imagedir,item))
os.system("cp %s %s/mid-%s -a" %(sourcefile,imagedir,item))
os.system("convert -resize 120 %s %s/sml-%s" %(sourcefile,imagedir,item)) #init image
dirRoot = raw_input('input images directory (default is ./)')
if len(dirRoot) == 0:
dirRoot = '.' if os.path.isdir(dirRoot):
imageCompre(dirRoot);
else:
print 'the directory %s is not exists' %dirRoot;

python+imageMagick写的一个压缩图片脚本的更多相关文章

  1. 基于七牛Python SDK写的一个批量下载脚本

    前言 上一篇基于七牛Python SDK写的一个同步脚本所写的脚本只支持上传,不支持文件下载. 虽然这个需求不太强烈,但有可能有人(在备份.迁移时)需要,而官方有没提供对应的工具,所以我就把这个功能也 ...

  2. Linux递归压缩图片脚本

    1 压缩图片 使用ImageMagick的convert命令进行压缩图片,一般只需要一个指定压缩质量的参数,比如: convert -quality 75 1.jpg 1_compress.jpg 可 ...

  3. 自己写的一个tomcat发布脚本

    闲来无事,就自己写一个shell脚本,方便自己以后在服务器上部署tomcat下的项目.我本地用maven打包,然后每次都要人工去切换一堆堆目录,有点繁琐,所以我写了下面的shell脚本. #! /bi ...

  4. 用Python 3写的一个Spider小爬虫(使用内置urllib模块and正则表达式)

    用Python写了一个Spider小爬虫,爬一爬斗鱼“王者荣耀”在线直播的主播及人气

  5. 把登录和退出功能单独写到一个公共.py脚本,其它用例test1,test2调用公共登录,退出函数

    公共登录/退出函数模块(login_exit.py): #coding:utf-8import timedef login(driver, username, password):#此处的driver ...

  6. 基于七牛Python SDK写的一个同步脚本

    需求背景 最近刚搭了个markdown静态博客,想把博客的图片放到云存储中. 经过调研觉得七牛可以满足我个人的需求,就选它了. 博客要引用图片就要先将图片上传到云上. 虽然七牛网站后台可以上传文件,但 ...

  7. python类似微信未读信息图片脚本

    其实就是实现一个效果,给一张图片,然后再右上角给出未读的信息数目,就像我们打开微信的时候,总是看到红点就忍不住想要点击去查看一样. 类似这种效果: 可以知道,图片是给定的,那么只要随机生成一个数字,然 ...

  8. Linux使用imagemagick的convert命令压缩图片、节省服务器空间

    一.安装: sudo apt-get install imagemagick 二.说明 imagemagick的命令convert可以完成此任务,其参数-resize用来改变图片尺寸,可以直接指定像素 ...

  9. Linux使用imagemagick的convert命令压缩图片,节省服务器空间

    1,安装imagemagick yum install ImageMagick 2,获取图片 find ./ -regex '.*\(jpg\|JPG\|png\|jpeg\)' -size +500 ...

随机推荐

  1. dup,dup2函数【转】

    转自:http://eriol.iteye.com/blog/1180624 转自:http://www.cnblogs.com/jht/archive/2006/04/04/366086.html ...

  2. 在分析nginx日志时常用命令总结【转】

    1. 利用grep ,wc命令统计某个请求或字符串出现的次数 比如统计GET /app/kevinContent接口在某天的调用次数,则可以使用如下命令: [root@Fastdfs_storage_ ...

  3. java多线程系列五、并发容器

    一.ConcurrentHashMap 1.为什么要使用ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在 ...

  4. Python3学习笔记07-List

    Python有6个序列的内置类型,但最常见的是列表和元 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 创建一个列表, ...

  5. 用python查看windows事件日志的方法(待后续研究)

    #coding=utf8 import copy import ctypes from ctypes import byref, POINTER, cast, c_uint64, c_ulong, c ...

  6. C# 汉字与区位码之间的相互转换(中文数字字母可以,支持空格,但是特殊字符未来得及测试)

    using System; using System.Text; namespace Test { class MainClass { /// <summary> /// 中文空白字符,用 ...

  7. mysql重置登录密码

    1.停止mysql服务. services.msc进入服务界面 停止mysql服务 2.打开一个cmd窗口. 输入mysqld --skip-grant-tables 启动了一个新的mysql服务 跳 ...

  8. (网络编程)socketserver模块服务端实现并发

    基于tcp的套接字(实现并发),关键就是两个循环,一个链接循环,一个通信循环 基于udp的套接字(不是正真意义上的并发,实现真并发) socketserver模块中分两大类:server类(解决链接问 ...

  9. sql in语句

    转自http://www.1keydata.com/cn/sql/sql-in.php 在 SQL 中,在两个情况下会用到 IN 这个指令:这一页将介绍其中之一 -- 与 WHERE 有关的那一个情况 ...

  10. 性能测试一:jmeter基础入门

    JMeter,一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具.具有高可扩展性.支持Web(HTTP/HTTPS).SOAP.FTP.JAVA等多种协议的 ...