第 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 上