Python图片处理_PIL学习记录

①:PIL获取,保存,更改图片


#调用模块
from PIL import  Image

#打开图片
img1 :Image.Image = Image.open("./picture/001.jpg")   #得到图片   

img1.show()                        #显示得到的图片
img2 = img1.resize((1000,2000))    #更改图片大小
img2.save("./picture/002.jpg")     #保存图片

②:更改图片格式


from PIL import  Image

img1: Image.Image = Image.open("./picture/099.jfif")
img1.save("./picture/099.jpg")

③:添加文本信息


from PIL import  Image,ImageDraw,ImageFont

img1: Image.Image = Image.open("./picture/099.jfif")

img1_draw = ImageDraw.Draw(img1)
# 选中字体,设置字体大小
img1_font = ImageFont.truetype("D:/iFontsClientFileCache/HYXieNTJ.ttf",240)

#(x,y):x左右,y上下
#输入的信息
#设置颜色
#选中字体

img1_draw.text((50,30),"学号:541913460XXX",fill='blue',font=img1_font)
img1_draw.text((50,250),"姓名:李XX",fill='red',font=img1_font)
img1.show()

④:获取图片信息


from PIL import  Image
import  numpy as np
img1: Image = Image.open("./picture/001.jpg")
img1 = img1.convert("RGB")


img_date = img1.getdata()

#list
img_list = list(img_date)
print(img_list)

#numpy
img_np =np.asarray(img_date)
print(img_np)

⑤:获取的数据变成图片


from PIL import  Image
import  numpy as np


k =0
lis =[]

for i in range(0,8):
    cur =[]
    lis.append(cur)

    for j in range(0,8):
        cur.append(k)
        k = k+2

print(lis[0])
print(lis[1])
print(lis[2])
print(lis[3])
print(lis[4])
print(lis[5])
print(lis[6])
print(lis[7])
img =Image.fromarray(np.asarray(lis)).convert("L")
img.save("./099.jpg")

运行结果:
[0, 2, 4, 6, 8, 10, 12, 14]
[16, 18, 20, 22, 24, 26, 28, 30]
[32, 34, 36, 38, 40, 42, 44, 46]
[48, 50, 52, 54, 56, 58, 60, 62]
[64, 66, 68, 70, 72, 74, 76, 78]
[80, 82, 84, 86, 88, 90, 92, 94]
[96, 98, 100, 102, 104, 106, 108, 110]
[112, 114, 116, 118, 120, 122, 124, 126]

0-126 :逐渐变白

生成的图片:

⑥:提取红色通道


from PIL import  Image
import  numpy as np

img1: Image.Image = Image.open("./picture/000.png")
img1 = img1.convert("RGB")

np_array = np.array(img1)

for i in np_array:  #遍历行
    for j in i:     #遍历列
        j[1]=0
        j[2]=0

img = Image.fromarray(np_array).convert("RGB")
img.save("./picture/test.jpg")

原图:

生成图片:

⑦:提取绿色通道,提取蓝色通道


代码改进:

from PIL import  Image
import  numpy as np

img1: Image.Image = Image.open("./picture/000.png")
img1 = img1.convert("RGB")

def get_R_Picture(img):
    np_array = np.array(img)

    for i in np_array:  #遍历行
        for j in i:     #遍历列
            j[1]=0
            j[2]=0

    img = Image.fromarray(np_array).convert("RGB")
    img.save("./picture/test_R.jpg")


def get_G_Picture(img):
    np_array = np.array(img)

    for i in np_array:  # 遍历行
        for j in i:  # 遍历列
            j[0] = 0
            j[2] = 0

    img = Image.fromarray(np_array).convert("RGB")
    img.save("./picture/test_G.jpg")


def get_B_Picture(img):
    np_array = np.array(img)

    for i in np_array:  # 遍历行
        for j in i:  # 遍历列
            j[0] = 0
            j[1] = 0

    img = Image.fromarray(np_array).convert("RGB")
    img.save("./picture/test_B.jpg")



get_R_Picture(img1)
get_G_Picture(img1)
get_B_Picture(img1)

生成图:

⑧:图像的模式


from PIL import  Image

img1: Image = Image.open("./picture/001.jpg")


img2 =img1.convert("CMYK")
img2.save("./picture/002.jpg")

img3 =img1.convert("RGB")
img3.save("./picture/003.jpg")

img4 =img1.convert("YCbCr")
img4.save("./picture/004.jpg")


print(img1.mode)   //查看图片的格式
print(img2.mode)
print(img3.mode)
print(img4.mode)

运行结果:
RGB
CMYK
RGB
YCbCr

常见的图片格式,推荐使用RGB。

⑨:镜像


from PIL import  Image,ImageDraw,ImageFont

img1 = Image.open("./picture/000.png")
#左右镜像
img1_lr = img1.transpose(Image.FLIP_LEFT_RIGHT)
img1_lr.save("./picture/000_lr.png")
#上下镜像
img1_tb = img1.transpose(Image.FLIP_TOP_BOTTOM)
img1_tb.save("./picture/000_tb.png")
#上下左右镜像
img1_lr_tb = img1.transpose(Image.FLIP_TOP_BOTTOM)
img2_lr_tb =img1_lr_tb.transpose(Image.FLIP_LEFT_RIGHT)
img2_lr_tb.save("./picture/000_lr_tb.png")

运行结果:

⑩:拼接图片


from PIL import  Image,ImageDraw,ImageFont

#准备拼接的两个图片
img1 = Image.open("./picture/000.png")
img2 = Image.open("./picture/000_lr_tb.png")


print(img1.size)    #显示(235, 182),表明图片长235,宽182
                   
new_img = Image.new('RGB',(470,182),(255,255,255))
					#图片格式,图片大小,底色
    
#拼接图片
new_img.paste(img1,(0,0))
new_img.paste(img2,(235,0))
new_img.save("./picture/000_pj.png")

生成图片:

⑪:切割图片


from PIL import  Image,ImageDraw,ImageFont

img1 = Image.open("./picture/000_pj.png")
print(img1.size)   # (470, 182)
img1_cut = img1.crop((100,20,370,100))
img1_cut.save("./picture/000_pj_cut.png")

生成图片:

⑫:图片缩放


from PIL import  Image,ImageDraw,ImageFont
import  numpy as np

img1 = Image.open("./picture/000_pj.png")
print(img1.size)        		 #(470, 182)
img1.thumbnail((100,100))		 #按缩放比例最大的算
img1.save("./picture/000_pj_jianxiao.png")

生成图片:

posted @ 2022-05-15 22:55  猪无名  阅读(101)  评论(0编辑  收藏  举报