方法一:使用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')
网友评论