PIL之基本操作

下面完整代码在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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值