下面完整代码在github仓库:传送门
文章目录
一、读取图片
from PIL import Image
import numpy as np
path1 = r"D:\PycharmProjects\2020-07-25-PIL\directory\jinchen.jpeg"
path2 = r"directory/jinchen.jpeg"
img = Image.open(path2)
print(img)
# img.show()
二、查看图片宽、高大小
w, h = img.size
print(img.size)
三、图像转numpy数组
a = np.array(img)
print(a)
print(a.shape)
四、numpy数组转图像
b = Image.fromarray(a)
print(b)
# b.show()
五、统计图片的像素直方图
his = img.histogram()
print(his)
print(len(his))
六、查看指定坐标位置的像素点RGB值
pixes = img.getpixel((120, 80))
print(pixes)
七、查看图像的模式类型
bands = img.getbands()
print(bands)
八、图片旋转
# 按指定角度旋转图像,返回旋转后的图像
img = img.rotate(45)
img.show()
九、图片裁剪
img2 = img.crop((100, 100, 2000, 2000))
# img2.show()
print(img2.size)
十、图片缩放
# 按指定尺寸大小缩放图像,返回缩放后的图像
x = img.resize((800, 800)) # 图像会变形
# x.show()
# thumbnail按最大边等比例缩放,没有返回值
# 相当于直接把图片缩放
img.thumbnail((8000, 8000))
# img.show()
十一、图像转通道
# 将图像转成灰度图,单通道
img = img.convert("L")
bands = img.getbands()
print(bands)
# img.show()
# 将图像转成RGB图,三通道
img = img.convert("RGB")
# img.show()
print(np.array(img).shape)
十二、将一张图片粘贴到另一张图片上
img.paste(Image.open("huge.jpeg"), (10, 10))
# img.show()
十三、保存图片
img.save("./directory/1.jpg")
十四、生成一张空白图片
image = Image.new("RGB", (100, 100), (255, 255, 255))
image.show()
十五、图像滤波
from PIL import Image, ImageFilter, ImageDraw, ImageFont
image = Image.open("./huge.jpeg")
img1 = image.filter(ImageFilter.BLUR) # 模糊
img2 = image.filter(ImageFilter.DETAIL) # 增强饱和度
img3 = image.filter(ImageFilter.CONTOUR) # 轮廓
img4 = image.filter(ImageFilter.EMBOSS) # 浮雕
# img1.show()
# img2.show()
# img3.show()
# img4.show()
十六、在图片上画点、线、矩形框等
draw = ImageDraw.Draw(image)
draw.point(xy=(200, 200), fill="red")
draw.line(xy=(300, 300, 800, 800), fill="green", width=3)
draw.rectangle((150, 40, 451, 480), fill=None, outline="red", )
draw.rectangle((100, 100, 400, 200), fill=None, outline="yellow")
draw.ellipse((100, 100, 400, 200), fill="red", outline="yellow") # 画椭圆
draw.rectangle((400, 400, 600, 600), fill=None)
draw.arc((400, 400, 600, 600), start=0, end=30, fill="blue") # 画圆弧
draw.chord((200, 200, 400, 400), start=0, end=270, outline="red") # 画和弦
print(image.size)
十七、小项目:生成随机二维码
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
#随机字母
def randChar():
a = chr(random.randint(65, 90))
b = chr(random.randint(97, 122))
c = str(random.randint(0, 9))
return random.choice([a, b, c])
# 背景颜色1
def ranColor1():
return (random.randint(65, 255),
random.randint(65, 255),
random.randint(65, 255))
# 前景颜色2
def ranColor2():
return (random.randint(32, 127),
random.randint(32, 127),
random.randint(32, 127))
# 240*60
width = 240
height = 60
image = Image.new("RGB", (width, height), (255, 255, 255))
# 创建字体对象
font = ImageFont.truetype("simsun.ttc", 40)
# 创建draw对象
draw = ImageDraw.Draw(image)
for k in range(10):
# 填充像素
for i in range(width):
for j in range(height):
draw.point((i, j), fill=ranColor1())
# image.show()
# 填充文字
for i in range(4):
draw.text((60*i+10, 10), randChar(), font=font, fill=ranColor2())
image = image.filter(ImageFilter.BLUR)
# image.show()
image.save("./directory/{0}.jpg".format(k+1))