DAY19-Pillow制作验证码
生活随笔
收集整理的這篇文章主要介紹了
DAY19-Pillow制作验证码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PIL:Python Imaging Library,已經是Python平臺事實上的圖像處理標準庫了。PIL功能非常強大,但API卻非常簡單易用。
由于PIL僅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基礎上創建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了許多新特性,因此,我們可以直接安裝使用Pillow。
安裝Pillow
如果安裝了Anaconda,Pillow就已經可用了。否則,需要在命令行下通過pip安裝:
$ pip install pillow操作圖像
來看看最常見的圖像縮放操作,只需三四行代碼:
from PIL import Image# 打開一個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')其他功能如切片、旋轉、濾鏡、輸出文字、調色板等一應俱全。
比如,模糊效果也只需幾行代碼:
from PIL import Image, ImageFilter# 打開一個jpg圖像文件,注意是當前路徑: im = Image.open('test.jpg') # 應用模糊濾鏡: im2 = im.filter(ImageFilter.BLUR) im2.save('blur.jpg', 'jpeg')效果如下:
PIL的ImageDraw提供了一系列繪圖方法,讓我們可以直接繪圖。比如要生成字母驗證碼圖片:
from PIL import Image, ImageDraw, ImageFont, ImageFilterimport random# 隨機字母: def rndChar():return chr(random.randint(65, 90))# 隨機顏色1: def rndColor():return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))# 隨機顏色2: def rndColor2():return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))# 240 x 60: width = 60 * 4 height = 60 image = Image.new('RGB', (width, height), (255, 255, 255)) # 創建Font對象: font = ImageFont.truetype('Arial.ttf', 36) # 創建Draw對象: draw = ImageDraw.Draw(image) # 填充每個像素: for x in range(width):for y in range(height):draw.point((x, y), fill=rndColor()) # 輸出文字: for t in range(4):draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2()) # 模糊: image = image.filter(ImageFilter.BLUR) image.save('code.jpg', 'jpeg') 廖雪峰版 def valid_img(request):#生成隨機顏色import randomdef get_random_color():return (random.randint(0,255),random.randint(0,255),random.randint(0,255))from PIL import Imagefrom PIL import ImageDraw,ImageFontfrom io import BytesIO#生成一個隨機顏色的圖片image=Image.new("RGB",(250,36),color=get_random_color())#實例化一個畫筆draw=ImageDraw.Draw(image)#實例化字體kumo.ttf需要下載font = ImageFont.truetype("blog/static/font/kumo.ttf", size=32)#生成5位包含數字大小寫的隨機碼random_str=""for i in range(5):random_num=str(random.randint(0,9))random_low_alpha=chr(random.randint(97,122))random_up_alpha=chr(random.randint(65,90))random_char=random.choice([random_num,random_low_alpha,random_up_alpha])#將生成的隨機碼畫到圖片上,(x軸,y軸)第四象限,隨機碼,隨機字體顏色,字體類型draw.text((20+i*40,0),random_char,get_random_color(),font=font)random_str+=random_char#將隨機碼存入sessionrequest.session["random_str"]=random_str# 噪點噪線# width=250# height=36# for i in range(10):# x1=random.randint(0,width)# x2=random.randint(0,width)# y1=random.randint(0,height)# y2=random.randint(0,height)# 畫線給定起點終點坐標,給定填充顏色# draw.line((x1,y1,x2,y2),fill=get_random_color())# # for i in range(100):# 畫點# draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())# x = random.randint(0, width)# y = random.randint(0, height)# 畫弧,在給定的區域內,在開始和結束角度之間繪制一條弧(圓的一部分)。# draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())#1、打開磁盤文件句柄# f=open("validcode.png","wb")#將圖片保存到磁盤上# image.save(f,"png")#從磁盤讀取圖片字節數據# with open("validcode.png","rb") as f:# data=f.read()#2、打開一個內存句柄f=BytesIO()#將圖片保存到內存中image.save(f,"png")#然后從內存中取出圖片字節數據data=f.getvalue()#傳給前端,前端img標簽可直接讀取圖片的字節類型數據return HttpResponse(data)html:
<div class="form-group"><label for="">驗證碼</label><div class="row"><div class="col-md-6"><input type="text"id="valid" class="form-control"></div><div class="col-md-6"><img width="250" height="36" src="/valid_img/" alt="" class="valid_img"></div></div></div>局部刷新驗證碼圖片:
// 驗證碼局部刷新 $(".valid_img").click(function () {$(this)[0].src+="?"})?
轉載于:https://www.cnblogs.com/guoyunlong666/p/9040090.html
總結
以上是生活随笔為你收集整理的DAY19-Pillow制作验证码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos 桥接配置 设置网络代理
- 下一篇: spring框架所有包解释