四、ImageEnhance模块(色彩、亮度)
ImageEnhance提供了许多函数,用于调整图像的色彩、对比度、亮度、清晰度等。调整图像的步骤如下:
确定要调整的参数,获取特定的调整器 调用调整器的enhance方法,传入参数进行调整。 注意:所有调整器都实现同一个接口,该接口中包含一个方法enhance
其中enhance方法接收一个参数factor,factor是一个大于0的数。当factor为1时,返回原图,当factor小于1返回减弱图,大于1返回增强图。
各个获取色彩调整器的方法如下:
方法名称 | 方法作用 |
---|---|
ImageEnhance.Color() | 获取颜色调整器 |
ImageEnhance.Contrast() | 获取对比度调整器 |
ImageEnhance.Brightness() | 获取亮度调整器 |
ImageEnhance.Sharpness() | 获取清晰度调整器 |
另外再讲一个调节亮度的函数,但是这个函数时Image中的函数point(),而不是ImageEnhance的。该函数传入一个参数,使用方法和Image.eval()类似,使用示例如下:
from PIL import Image
# 打开图像
im1 = Image.open('gtx.jpg')
# 变暗操作
im2 = im1.point(lambda x:x*0.5)
# 变量操作
im3 = im1.point(lambda x:x*1.5)
# 获取原图大小
w, h = im1.size
# 创建一个原图大小3倍的图片
img = Image.new("RGB", (w*3, h))
# 将减弱的图片放在最左边
img.paste(im2, (0, 0))
# 将原图放在中间
img.paste(im1, (w, 0))
# 将增强后的图片放在最右边
img.paste(im3, (w*2, 0))
# 显示图片
img.show()
五、ImageDraw模块
该模块提供了许多绘制2D图像的功能,我们可以通过绘制获取一个全新的图像,也可以在原有的图像上进行绘制。在我们使用该模块进行绘制时,我们需要先获取ImageDraw.Draw对象,获取方式如下:
5.1、绘制简单形状
在绘制之前,我们先创建一个空白的图片:
from PIL import Image, ImageDraw
# 创建一个300*300的白色图片
im = Image.new("RGB", (300, 300), "white")
# 获取ImageDraw.Draw对象
drawer = ImageDraw.Draw(im)#后续都是用drawer操作
绘制直线
"""
xy:起点坐标和终点坐标(x1, y1, x2, y2)
fill:填充色。"red"、"blue"...
width:轮廓粗细
joint:连接方式,可以是曲线
"""
line(xy, fill, width, joint)
# 绘制直线
drawer.line((50, 50, 150, 150), fill='green',width=2)
绘制矩形
"""
xy:左上角坐标和右下角坐标(x1, y1, x2, y2)
fill:填充色。"red"、"blue"…
outline:轮廓色。同上
width:轮廓粗细
"""
rectangle(xy, fill, outline, width)
使用示例
drawer.rectangle((50, 50, 150, 150), fill='green', outline='red', width=3)
绘制圆弧
"""
xy:包含圆弧所在圆的矩形的左上角坐标和右下角坐标(x1, y1, x2, y2)
start:起始角度
end:终止角度
fill:填充色。"red"、"blue"...
width:轮廓粗细
"""
arc(xy, start, end, fill, width)
# 使用示例
drawer.arc((50, 50, 150, 150), start=0, end=90, fill='green', width=3)
绘制椭圆
"""
xy:包含椭圆(或圆)的矩形的左上角坐标和右下角坐标(x1, y1, x2, y2)
fill:填充色。"red"、"blue"...
outline:轮廓颜色
width:轮廓粗细
"""
ellipse(xy, fill, outline, width)
# 使用示例
drawer.ellipse((50, 50, 150, 150),fill='green', outline='red', width=3)
绘制弦
"""
xy:弦所在椭圆的矩形的左上角坐标和右下角坐标(x1, y1, x2, y2)
start:开始角度
end:终点角度
fill:填充色。"red"、"blue"...
outline:轮廓颜色
width:轮廓粗细
"""
chord(xy, start, end, fill, outline, width)
# 使用示例
drawer.chord((50, 50, 150, 150),start=0, end=90, fill='green', outline='red', width=3)
绘制扇形
"""
xy:扇形所在椭圆的矩形的左上角坐标和右下角坐标(x1, y1, x2, y2)
start:开始角度
end:终点角度
fill:填充色。"red"、"blue"...
outline:轮廓颜色
width:轮廓粗细
"""
pieslice(xy, start, end, fill, outline, width)
# 使用示例
drawer.pieslice((50, 50, 150, 150),start=0, end=90, fill='green', outline='red', width=3)
绘制多边形
"""
xy:多边形各个点坐标的元组/列表(x1, y1, x2, y2)
fill:填充色。"red"、"blue"...
outline:轮廓颜色
"""
pieslice(xy, fill, outline)
# 使用示例
drawer.polygon((50, 50, 150, 150, 150, 200, 200, 250, 50, 50), fill='green', outline='red')
绘制点
"""
xy:点的坐标
fill:填充色。"red"、"blue"...
"""
point(xy, fill)
# 使用示例
drawer.point((100, 100), fill='black')
绘制文字
"""
xy:起点坐标
text:绘制的文本
fill:填充色。"red"、"blue"...
...其中绘制文字还有许多其它参数
"""
text(xy, text, fill)
# 使用示例
drawer.text((100, 100), text='zack' fill='red')
当我们绘制中文时,上述代码会报错,因为默认编码是不支持中文的。我们可以在C:/Windows/Fonts目录下找到字体文件,我们选择一个支持中文的。我这里直接是将字体文件复制到项目底下来了,代码如下:
from PIL import Image, ImageDraw, ImageFont
# 创建一个图像用于绘制文字
im = Image.new("RGB", (300, 300), "white")
drawer = ImageDraw.Draw(im)
# 获取字体对象
imFont = ImageFont.truetype('simkai.ttf', 30)
# 绘制文字时设置字体
drawer.text((50, 100),text="啥",font=imFont,fill="red")
im.show()
Comments NOTHING