美文网首页
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