• 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
  • 相关阅读:
    Android自己主动升级框架
    一句话说清楚啥是delegate
    C#
    MySQL Community Server 5.6和MySQL Installer 5.6
    仿htc sense的弹性listView!
    双向队列(STL做法)
    余承东:未来5年中国大部分智能手机厂商消失
    P3808 【模版】AC自动机(简单版)
    P1103 书本整理
    P2580 于是他错误的点名开始了
  • 原文地址:https://www.cnblogs.com/elephanyu/p/9219179.html
Copyright © 2020-2023  润新知