ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python图片处理_PIL学习记录

2022-05-15 23:00:08  阅读:220  来源: 互联网

标签:picture PIL img 记录 Python Image print np img1


①: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")

生成图片:

标签:picture,PIL,img,记录,Python,Image,print,np,img1
来源: https://www.cnblogs.com/LJY-YSWZ/p/16275134.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有