由于昨天胃疼得要死,所以今天早上才写
今天主要学习了**PIL(Python Image Library)**这是一个Python的图像处理工具包,功能就是图像处理
使用步骤
- 设置pip环境(settings–pip–install)
- 安装在Terminal输入pip install pillow
- 从文件PIL导出Image模块(Image类在模块中定义)
from PIL import Image
- 基本操作
#打开图片
image1=Image.open(' ')#image1是Image的一个对象
#显示图片
image1.show()
#保存图片
image1.save('')
- 滤镜
#加入模块 **ImageFilter**
#滤镜对象.filter(滤镜效果)image1就是这样的对象
image2=image1.filter(ImageFilter.EMBOSS)
#EMBOSS浮雕CONTOUR铅笔画BLUR模糊FIND_EDGES锐化
- 图片粘贴
#paste(要粘贴的图片,位置)
image1.paste(image2,(0,0))
#创建空白图
#new(模式,大小,颜色)
#模式:RGB红绿蓝 RGBA红绿蓝透明度
#(255,0,0)红 (0,255,0) 绿 (0,0,255) 蓝 (255,255,255)白 (0,0,0) 黑
empty=Image.new('RGB',(0,0),(0,0,0))
empty.paste(image1,(0,0))
- 文字水印
#加入模块**ImageDraw, ImageFont**
#指定字体类型 **ImageFont.truetype**(什么字体类型,字体大小)
x=ImageFont.turetype('文件夹/fonts/aa.ttf',28)
#需要找一个对象,将aa类型的 28大小的字体画到图片上
y=ImageDraw.Draw(image1)
#指定文字水印内容 y.text((坐标),文字内容,文字颜色,字体对象)
y.text((0,0),'文字内容',(0,0,0,0),x)
image1.show()
- 缩放图片
image1.thumbnail((100,100))
- 裁剪图片
#打开的图片.crop(范围) 范围:((x1,y1,x2,y2))
z=image1.crop((0,0,200,200)#左上角,右下角
z.show()
- 镜像图片
#左右镜像
image2=image1.transpose(Image.FLIP_LEFT_RIGHT)
#上下镜像
image2=image1.transpose(Image.FLIP_TOP_BOTTOM)
- 制作验证码
from PIL import Image,ImageDraw, ImageFilter , ImageFont
from random import randint #随机选取数字
image1 = Image.new('RGBA',(120,60),(120,130,140,100))
#模式,大小,颜色透明度
image1.show()
#渲染背景
draw = ImageDraw.Draw(image1)
#x = randint(0,120)
#y = randint(0, 60)
#r = randint(0, 255)
#g = randint(0, 255)
#b= randint(0, 255)
#draw.point((100,50),(255,0,0))#固定坐标只能画一个点
#draw.point((x,y),(r,g,b))#变化坐标,颜色
for x in range(0,120):#变化数字,颜色随机
for y in range(0,60):#x取 0, y取 0-59,x取 1,y取 0-59
r = randint(0, 255)
g = randint(0, 255)
b = randint(0, 255)
draw.point((x,y),(r,g,b))
image1.filter(ImageFilter.BLUR)
#image1.show()
#from random import randint
#print(randint(1,50))#结果是范围内任何数字
#渲染文字
font=ImageFont.truetype('files/fonts/aa.ttf',20)
#draw.text((10,20),'qf',(100,100,111),font)#固定
for x in range(5):
num = str(randint(0,9))#将数字类型转为文字类型
y=randint(10,20)
r=randint(0,255)
g=randint(0,255)
b=randint(0,255)
draw.text((x*30,y),num,(r,g,b),font)
#print(num)
image1.show()