美文网首页
python使用PIL压缩图片,并转换为base64

python使用PIL压缩图片,并转换为base64

作者: Py_Explorer | 来源:发表于2019-03-20 11:44 被阅读0次

    方法一:使用urllib2下载图片,并转换为base64

        from PIL import Image
        import urllib2
        import cStringIO
        import base64
    
        origin_file = cStringIO.StringIO(urllib2.urlopen(url).read())
        img = Image.open(origin_file)
        w, h = img.size
        larger_side = max(w, h)
        if larger_side > max_length:
            img = img.resize((int(float(max_length) * w / larger_side),
                              int(float(max_length) * h / larger_side)), Image.ANTIALIAS)
        jpeg_image_buffer = cStringIO.StringIO()
        img.save(jpeg_image_buffer, format="JPEG")
        base64_str = base64.b64encode(jpeg_image_buffer.getvalue())
        return base64_str
    

    方法一中,图片不需要下载到本地,即可转换为base64。

    方法2:使用requests下载图片并转换为base64

        from PIL import Image
        import requests
        import base64
    
        data = requests.get(url)
        filename = '1.png'
        with open(filename, 'wb') as fp:
            fp.write(data.content)
        im = Image.open(filename)
        #使用thumbnail与resize是两种方法
        im.thumbnail((80, 80))
        #im.resize((50, 50), Image.ANTIALIAS)
        im.save('44.png', 'png', quality=95)
        print(im.format, im.size, im.mode)
        im.save(name, 'png')
    

    方法二中,resize函数可以缩小,也可以放大,thumbnail只能缩小,不能放大。
    所以,如果你只打开一次图片,要存出多个尺寸的话,要么,从大到小开始缩放。
    要么,使用resize.建议从大到小开始缩放,因为,使用resize放大的话,你可以想象那个马赛克。
    当然,你也可以设置缩放图片的质量(
    PIL.Image.NEAREST:最低质量,
    PIL.Image.BILINEAR:双线性,
    PIL.Image.BICUBIC:三次样条插值,
    PIL.Image.ANTIALIAS:最高质量)。

    图片模糊的话也很简单。
    使用

     im = Image.open(filename)
     im.filter(ImageFilter.BLUR)
     im.save(filename, 'jpeg')
    

    相关文章

      网友评论

          本文标题:python使用PIL压缩图片,并转换为base64

          本文链接:https://www.haomeiwen.com/subject/nuhzmqtx.html