目標:
給定圖片url和指定圖片尺寸,生成縮略圖並保存。
用於生成正方形圖並避免圖片拉伸變形。
原始圖片(400x225):
resize後的圖片(128x128):
import requests as req
from PIL import Image
from io import BytesIO
def make_thumb(url, sizes=(128, 128)):
"""
生成指定尺寸縮略圖
:param url: 圖像鏈接
:param sizes: 指定尺寸
:return: 無返回,直接保存圖片
"""
response = req.get(url)
im = Image.open(BytesIO(response.content))
mode = im.mode
if mode not in ('L', 'RGB'):
if mode == 'RGBA':
# 透明圖片需要加白色底
alpha = im.split()[3]
bgmask = alpha.point(lambda x: 255 - x)
im = im.convert('RGB')
im.paste((255, 255, 255), None, bgmask)
else:
im = im.convert('RGB')
# 切成方圖,避免變形
width, height = im.size
if width == height:
region = im
else:
if width > height:
# h*h
delta = (width - height) / 2
box = (delta, 0, delta + height, height)
else:
# w*w
delta = (height - width) / 2
box = (0, delta, width, delta + width)
region = im.crop(box)
# resize
thumb = region.resize((sizes[0], sizes[1]), Image.ANTIALIAS)
#保存圖片
filename = url.split('/')[-1]
name, ext = filename.split('.')
savename = name + str(sizes[0]) + '_' + str(sizes[1]) + '.' + ext
thumb.save(savename, quality=100)
url = 'http://lh3.ggpht.com/_S0f-AWxKVdM/SdeJxV3uhDI/AAAAAAAAHrY/FVTEpdNf4X0/lenna%5B4%5D.jpg'
make_thumb(url)
refererence:
https://www.jb51.net/article/49843.htm