第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,相似于微信未读信息数量那种提示效果。 相似于图中效果python
第 0001 题:作为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?git
第 0005 题:你有一个目录,装了不少照片,把它们的尺寸都变成不大于 iPhone5 分辨率的大小github
第 0010 题:使用 Python 生成相似于下图中的字母验证码图片;bash
第 0022 题:iPhone 六、iPhone 6 Plus 早已上市开卖,请查看你写的 第 0005 题的代码是否能够复用;微信
The friendly PIL fork (Python Imaging Library)dom
PIL:Python Imaging Library,顾名思义,这是 Python 平台上的图像处理标准库,功能很是强大,API 很是简单易用,可是因为许久未维护了,对 Python 3 不支持,因此选用 Pillow(在 PIL 基础上建立的兼容版本),支持最新的 Python 3.x,又加入了许多新特性。ide
$ pip3 install pillow
# -*- coding: utf-8 -*- from PIL improt Image imagefile = './111.png' # 打开一个图片 image = Image.open(imagefile) print(image.show())
Pillow 库中最核心的类就是 Image 了,读取图片、处理图片、建立图片等操做都须要 Image 的支持;函数
# -*- coding: utf-8 -*- from PIL import Image # 打开一个图片,并返回 Image 对象 image = Image.open("111.jpg") # 查看图片各项属性 print(image.format, image.size, image.mode)
Pillow 库支持很是多的图片格式,使用 open() 函数直接读取图片便可,不须要考虑图片的格式,Pillow 本身会处理。学习
Image 模块中 save() 函数能够保存图片,除非自定义文件格式,那么文件中扩展名用来指定文件格式:ui
from PIL import Image image = Image.open('111.jpg') # Image 模块中 save() 函数保存图片 image.save('222.png') # 保存为指定格式 image.save('222', 'jpeg')
Pillow 不会解码或 raster 数据,当你打开一个文件,Pillow 经过文件头确认文件格式,大小,mode 等数据,余下数据直到须要时才处理,这就意味着 Pillow 在打开文件时很是快,与文件大小和压缩格式无关;
from PIL import Image image = Image.open('111.jpg') # 从图片中提取一个子矩形 (left, upper, right, lower), Pillow 左边系统的原点(0,0)为图片的左上角,坐标中的数字 # 单位为像素点,下面为截取图片大小为 300*300 像素 box = (100, 100, 400, 400) region = image.crop(box) # Rolling an image def roll(image, delta): "Roll an image sideways" xsize, ysize = image.size delta = delta % xsize if delta == 0: return image part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) part1.load() part2.load() image.paste(part2, (0, 0, xsize-delta, ysize)) image.paste(part1, (xsize-delta, 0, xsize, ysize)) return image # Splitting and merging bands r, g, b = im.split() im = Image.merge("RGB", (b, g, r))
# -*- coding: utf-8 -*- from PIL import Image, ImageFilter # 打开一个jpg图像文件,注意是当前路径: im = Image.open('test.jpg') # 得到图像尺寸: w, h = im.size print('Original image size: %sx%s' % (w, h)) # 缩放到50%: im.thumbnail((w//2, h//2)) print('Resize image to: %sx%s' % (w//2, h//2)) # 把缩放后的图像用jpeg格式保存: im.save('thumbnail.jpg', 'jpeg') # 开启模糊滤镜 im2 = im.filter(ImageFilter.BLUR) im2.save('blur.jpg', 'jpeg')
PIL 的 ImageDraw 提供了一系列绘图方法,能够直接绘图,生成验证码图片等:
第 0010 题中图片就是使用 ImageDraw 生成的。
其余更多功能能够参考 Pillow 官网文档:https://pillow.readthedocs.org/random
random 模块主要用于生成随机数
random.uniform(a, b) ,用于生成一个指定范围(a,b)内的随机浮点数
bpython version 0.16 on top of Python 3.5.1 /usr/local/opt/python3/bin/python3.5 >>> import random >>> random.uniform(1, 10) 8.273246268076129 >>>
random.randint(a, b),用于生成一个指定范围内的整数:
>>> random.randint(64, 255) 119 >>>
random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中获取一个随机数:
# random.randrange(10, 100, 2) 至关于从 [10, 12, 14... 96, 98] 序列中获取一个随机数 # 至关于 random.choice(range(10, 100, 2)) >>> random.randrange(10, 100, 2) 68 >>>
random.choice(sequence),从序列中获取一个随机元素,sequence 泛指一系列类型:list、tuple,str 等都属于 sequence:
>>> random.choice(["JGood", "is", "a"]) 'JGood' >>> random.choice("学习 python") 'n' >>> random.choice(("JGood", "is", "a")) 'is' >>>
random.shuffle(x [, random]),用于将一个列表中的元素打乱,如同洗牌;
>>> p=["Python","is","powerful","simple","andsoon..."] >>> random.shuffle(p) >>> print(p) ['Python', 'andsoon...', 'simple', 'is', 'powerful'] >>>
random.sample(sequence, k),从指定序列中随机获取指定长度的片断,sample 不会修改原有序列:
>>> list=[1,2,3,4,5,6,7,8,9,10] >>> slice=random.sample(list,5) # 从 list 中随机获取 5 个元素,做为一个片断返回 >>> print(slice) [7, 4, 5, 10, 1] >>> blice=random.sample(list) Traceback (most recent call last): File "<input>", line 1, in <module> blice=random.sample(list) TypeError: sample() missing 1 required positional argument: 'k' >>> blice=random.sample(list, k=1) >>> print(blice) [9] >>>
题目代码上传至 github 上