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)
生成图片: