Pillow模块
一、Pillow模块安装
- 在cmd指令框通过pip安装
pip install pillow
- 在pycharm中安装模块
二、操作图像
- 图片缩放
# 方法一
from PIL import Image
img3=Image.open('002.jpg')
w,h=img3.size
img3.thumbnail((w//2,h//2))#w//2 取整,将图像的宽高缩小为1/2,thumbnail()中传入的是一个可迭代对象
img3.show()
#方法二:通过resize改变图像尺寸
from PIL import Image
img2=Image.open('002.jpg')
img2=img2.resize((500,300))
img2.show()#展示图片
#通过save()保存修改后的图片,第一个参数为保存图片的路径,后面要有图片格式的后缀名(如:.jpg),第二个参数是文件格式,图片通常用jpeg格式
img2.save('image2.jpg','jpeg')
- 添加滤镜
#以模糊滤镜为例
from PIL import Image,ImageFilter
img=Image.open('002.jpg')
img1=img.filter(ImageFilter.BLUR)#模糊滤镜
img1.show()
- 图片裁切
from PIL import Image
img=Image.open('002.jpg')
box=([0,0,100,100])#前两个为起点处xy值,后两个为结束点xy的值,裁剪一个宽高均为100px的区域
region=img.crop(box)
region.show()
- 图片旋转
#transpose():指定旋转角度的操作
from PIL import Image
img=Image.open('002.jpg')
imgRotate=img.transpose(Image.ROTATE_90)#旋转90度
imgRotate.show()
除了传入Image.ROTATE_90,也可以传入以下参数
- Image.FLIP_LEFT_RIGHT 表示将图像左右翻转
- Image.FLIP_TOP_BOTTOM 表示将图像上下翻转
- Image.ROTATE_90 表示将图像逆时针旋转90°
- Image.ROTATE_180 表示将图像逆时针旋转180°
- Image.ROTATE_270 表示将图像逆时针旋转270°
- Image.TRANSPOSE 表示将图像进行转置(相当于顺时针旋转90°)
- Image.TRANSVERSE 表示将图像进行转置,再水平翻转
#rotate():自定义旋转角度
from PIL import Image
img=Image.open('002.jpg')
imgRotate=img.rotate(180)#旋转180度
imgRotate.show()
- 给图片添加图片水印
#paste(region,box,mask)(将一个图像粘贴到另一个图像可以做图片水印)
from PIL import Image
img=Image.open('002.jpg')
cimg=Image.open('007.jpg')
wid1,hei1=img.size
wid2,hei2=cimg.size
img.paste(cimg,(wid1-wid2,hei1-hei2))#第一个参数:用作水印的图片(被粘贴的图片),第二个参数:水印位置(此处是在图片的右下角)
img.show()
效果图
- 给图片添加文字水印
from PIL import Image
from PIL import ImageFont,ImageDraw
str='辰--月 blog'#要用作水印的文字
image=Image.open('002.jpg')
#选择文字字体,ImageFont.truetype()中第一个参数是某个字体文件的保存路径,第二个参数是字号(字体大小)
font=ImageFont.truetype(r'D:\Python_html\PythonProject\005pillow模块\HYRunYuan-55W.ttf',18)
draw=ImageDraw.Draw(image)
#draw.text(position,words,font,fill)postion:文字写入的位置,words:写入的文本内容,font:文字的字体字号,fill:用rgb颜色表示法填充文字
draw.text((250,100),str,font=font,fill=(200,200,200))#写入文本内容
image.show()
- 生成四个数字或字母的图形验证码
import string
import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter
# 定义图片宽高
width = 240
height = 60
# 1、删除随机数字或字母
def randChar():
# return chr(random.randint(65,90))#生成的是一个大写字母
return ''.join(random.sample(string.ascii_lowercase + string.digits, 1)) # 随机生成一个数字或字母
# 随机生成背景颜色
def randColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
def randColor2():
return (random.randint(0, 127), random.randint(0, 127), random.randint(0, 127))
# 生成干扰线的位置(返回一个(x,y)坐标点)
def lineposition():
return (random.randint(0, width), random.randint(0, height))
# 新建空白图片
image = Image.new('RGB', (width, height), (255, 255, 255))
# 设置字体字号
font = ImageFont.truetype(r'D:\Python_html\PythonProject\005pillow模块\HYRunYuan-55W.ttf', 36)
draw =ImageDraw.Draw(image)
# 给图片填充背景色(也可以用来给图片添加噪点)
for x in range(width):
for y in range(height):
draw.point((x, y), fill=randColor())
# 绘制10条干扰线
for i in range(10):
draw.line([lineposition(), lineposition()],fill=(random.randint(50, 200), random.randint(50, 200), random.randint(50, 200)), width=1)
# 绘制文字
for i in range(4):
draw.text((60*i+10,15),randChar(),font=font,fill=randColor2())
image.show()
image.save('code5.jpg','jpeg')