python生成缩略图
来源:互联网 发布:团队工作安排软件 编辑:程序博客网 时间:2024/05/17 23:10
一、环境配置
确保系统安装了libjpeg libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev
如果系统未安装,则会出现 JPEG support not available的异常。 安装libjpeg-dev需要注意对安装的库文件生成链接,即执行:
# ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib
# ln -s /usr/lib/i386-linux-gnu/libfreetype.so /usr/lib
# ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib
然后删掉 PIL 的解压文件,重新解压一份再安装即可。
二、使用PIL生成缩略图
#-*-!/usr/bin/env python-*-#-*-coding=utf-8-*-from PIL import Imageimport osimport sysimport fnmatchimport loggingclass ThumbnailGenerator: # --*-- exts 为规定的后缀名列表,空则获取所有类型文件 --*-- def __getFileList(self, path, exts=None, subdir=True): if os.path.exists(path): dirlist = [] for name in os.listdir(path): fullname = os.path.join(path, name) if os.path.isdir(fullname): dirlist += self.getFileList(fullname,exts) else: if exts and len(exts) > 0: for ext in exts: if fnmatch.fnmatch(fullname, ext): dirlist.append(fullname) break elif exts == None or len(exts) == 0: dirlist.append(fullname) return dirlist else: return [] # --*-- sizes 参数传递要生成的尺寸,可以生成多种尺寸,每个size是一个二值元组 --*-- def __make_thumb(self, source_file, dest_path, sizes): basename = os.path.basename(source_file) dest_path try: im = Image.open(source_file) except IOError, e: logging.error('Open %s error: ' + str(e), source_file) return mode = im.mode if mode not in ('L', 'RGB'): if mode == 'RGBA': # 透明图片需要加白色底 alpha = im.split()[3] bgmask = alpha.point(lambda x: 255-x) im = im.convert('RGB') # paste(color, box, mask) im.paste((255,255,255), None, bgmask) else: im = im.convert('RGB') width, height = im.size if width == height: region = im else: if width > height: delta = (width - height)/2 box = (delta, 0, delta+height, height) else: delta = (height - width)/2 box = (0, delta, width, delta+width) region = im.crop(box) for size in sizes: filename = os.path.join(dest_path,basename) thumb = region.resize((size[0],size[1]), Image.ANTIALIAS) thumb.save(filename, quality=100) # 默认 JPEG 保存质量是 75, 不太清楚。可选值(0~100) def thumb_generate(self, source_path, dest_path, sizes, subdir=True): exts = ['*.jpg','*.png','*.JPG','*.PNG'] file_list = self.__getFileList(source_path, exts, subdir) for file in file_list: try: self.__make_thumb(file, dest_path, sizes) except Exception, e: logging.error('Thumb %s error: ' + str(e), file)if __name__ == '__main__': logging.basicConfig(filename='thumb.log',filemode='w',format='[%(asctime)s]-%(levelname)s : %(message)s',level=logging.DEBUG) sizes = [(128,96)] source_path = '201206' dest_path = 's' generator = ThumbnailGenerator() generator.thumb_generate(source_path,dest_path,sizes)
- python生成缩略图
- Python 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- 生成缩略图
- Button未设type属性时在非IE6/7中具有submit特性
- CSDN高校巡讲石大站—海尔公司云计算工程师刘卫涛关于“云计算,云电视”科技讲座
- C指针浅析
- java反射学习--操作私有成员
- tomcat启动与停止时自动运行代码
- python生成缩略图
- Longest Repeated subsequence HDOJ2890
- android 应用测试。
- 用Pomelo 搭建一个简易的推送平台
- VS2010 C/S模式winForm打包部署.详细!
- BT协议的工作过程
- 一个程序员的爱情表白书
- STM32F107之GPIO相关
- How many HDOJ2609