PIL之图片压缩

由于生产环境是centos6.5,开发环境为系统默认的python2.6.6且在内网,使用PIL时出现如下问题:

  1、在开发环境使用python2.6.6 的pip安装pillow包时会出现required = {'jpeg', 'zlib'}的依赖安装错误

  2、在开发环境使用python2.7的pip安装的pillow包可以在python2.7环境正常使用,但在python2.6.6环境不能正常使用

  3、使用PIL官网的2.6的zip源码包安装,可以正常安装,但使用会出现no _imaging c module错误

最终解决方案:

  1、开发可上网的python2.6.6环境下缓存python-imaging-1.1.6-19.el6.x86_64此包,拷贝至生产环境使用rpm安装即可

  开发环境使用yum紧下载方式缓存包:

  # yum install --downloadonly --downloaddir=abs_downpath python-imaging -y

  生产环境使用rpm安装:

  # rpm -ivh python-imaging-1.1.6-19.el6.x86_64.rpm

  2、开发可上网的python2.6.6环境下使用yum直接安装python-imaging此包,将产生的库文件拷贝至生产环境使用即可

  开发环境使用yum安装包并获取产生的库文件:

  # yum install python-imaging -y

  # rpm -ql python-imaging

  可以发现库文件在/usr/lib64/python2.6/site-packages/PIL目录

  rpm包和库文件可在百度云下载 https://pan.baidu.com/s/1Yb8r6rgeH5DIKwuK6mGdFw

图片处理要求:

  1、图片大于500K时缩放至500K内

  2、返回图片的二进制内容

结果代码:

 1 # coding: utf8
 2 import StringIO
 3 '''以PIL.Image.open(file)方法使用会报错'''
 4 from PIL import Image
 5 
 6 def imgResize(imgPath):
 7     '''
 8     入参:图片地址
 9     出参:小于500K的图片二进制内容
10     '''
11     img = Image.open(imgPath)
12     cache = StringIO.StringIO()
13     w,h = img.size
14     img.resize((w*4/5,h*4/5),Image.ANTIALIAS).save(cache, 'JPEG')
15     timg = cache.getvalue()
16     if len(timg) > 500 * 1000:
17         return imgResize(timg)
18     else:
19         return timg

后由于图片上带有文字,压缩后文字看不清,使用质量压缩(稍微图片清晰度,但缩小图片大小),代码如下:

 1 import StringIO
 2 from PIL import Image
 3 
 4 def imgResize(self, img, compressQuality=70):
 5     cache = StringIO.StringIO()
 6     img.save(cache, 'JPEG', quality=compressQuality)
 7     imgBin = cache.getvalue()
 8     if len(imgBin) > 500 * 1024:
 9         return self.imgResize(img, compressQuality=compressQuality - 5)
10     else:
11         return imgBin
原文地址:https://www.cnblogs.com/elephanyu/p/9219179.html