为了加深理解,写了一些代码测试,在这里记录一下吧:

关于图片的模式问题,之前做过笔记,有“1”,“L”,"P","RGB","RGBA","CMYK',"YCBCr","Note","LAB"等,这几种图片模式有什么区别呢?

#001

from PIL import Image
img1=Image.new("1",(3,3))
data1=img1.getdata()
print(list(data1))
img2=Image.new("L",(3,3))
data2=img2.getdata()
print(list(data2))
img3=Image.new("P",(3,3))
data3=img3.getdata()
print(list(data3))
img4=Image.new("RGB",(3,3))
data4=img4.getdata()
print(list(data4))
img5=Image.new("CMYK",(3,3))
data5=img5.getdata()
print(list(data5))

>>

[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)]
[(0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)]

可以看出"1","L",“P”模式都是用一位表示颜色值,而"RGB'使用3位表示颜色值,"RGBA","CMYK"等用四位来表示

#002

from PIL import Image
img1=Image.new("",(3,3),18)
data1=img1.getdata()
print(list(data1)) img1.save("2.png")
img_1=Image.open("2.png")
print(list(img_1.getdata()))

>>

[18, 18, 18, 18, 18, 18, 18, 18, 18]
[255, 255, 255, 255, 255, 255, 255, 255, 255]

之前说"1"模式只有黑白两种颜色,一个像素也是用一位表示,那试着在创建它的时候给它设置一个非黑白色的颜色,结果保存再读取出来的,又自动变成黑色了

#003

from PIL import Image
img1=Image.new("L",(3,3),(30,30,30))
data1=img1.getdata()
print(list(data1))

>>TypeError: function takes exactly 1 argument (3 given)

#004

from PIL import Image
img1=Image.new("RGB",(3,3),(30,30,30))
data1=img1.getdata()
print(list(data1)) img1.save("2.png")
img_1=Image.open("2.png")
print(list(img_1.getdata()))

>>

[(30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30)]
[(30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30)]

创建“L”模式时,给它传入一个rgb值报错了,“RGB”模式则可以。

然后,对于RGB模式去亮色转灰色有点好奇,在网上找到很多方法,不明所以,但是有几个公式可以用,其中一个是:

gray=R*0.3+G*0.59+B*0.11,顺便试了一下

#005

from PIL import Image
img1=Image.new("RGB",(100,100),(135,206,235))
#img1.show()
gray=135*0.3+206*0.59+235*0.11
img2=Image.new("RGB",(100,100),(int(gray),int(gray),int(gray)))
print(str(gray))
print(str(int(gray)))
img2.show()

#006

from PIL import Image
img1=Image.open("f:\cat.jpg")
or_data=list(img1.getdata())
#print(or_data)
gr_data=[]
for pix in or_data:
i=pix[0]*0.3+pix[1]*0.59+pix[2]*0.11
j=int(i)
gr_pix=(j,j,j)
gr_data.append(gr_pix) gr_img=Image.new("RGB",(img1.size[0],img1.size[1]))
gr_img.putdata(gr_data)
gr_img.show()

转化效果

关于PIL库Image模块的一些测试代码的更多相关文章

  1. python之PIL库(Image模块)

    PIL(Python Image Library)是python的第三方图像处理库,PIL的功能非常的强大,几乎被认定是Python的官方图像处理库了. 由于PIL仅支持到python2.7于是一群志 ...

  2. 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码: int test_detection() { std::vector<std::string&g ...

  3. 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Identification模块用于比较两幅人脸图像的相似度,以下是测试代码: int test_recognize() { const std::stri ...

  4. 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() { std: ...

  5. PIL库的总结及运用

    PIL库的总结:(以代码形式) #date: 2018/11/15 from PIL import Image,ImageFilter,ImageDraw,ImageFont #####除了缩略图的方 ...

  6. PIL库参考文档之Image模块

    原文: https://pillow-cn.readthedocs.io/zh_CN/latest/reference/Image.html 中文版参考文档不全,所以自己试着翻译了一下,以下~备注部分 ...

  7. Python 之 使用 PIL 库做图像处理

    http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...

  8. 关于PIL库的一些概念

    关于PIL库的一些概念 pil能处理的图片类型pil可以处理光栅图片(像素数据组成的的块). 通道一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加 模式 ...

  9. 解析库-beautifulsoup模块

    # -*- coding: utf-8 -*- from bs4 import BeautifulSoup # 安装:pip install beautifulsoup4 # Beautiful So ...

随机推荐

  1. 030-PHP日期查询函数

    <?php , , ))//检查日期函数 { print("2,18,1970 :" . "这是一个正确的日期格式"); } else { print(& ...

  2. 4. 异步多级缓存架构+nginx数据本地化渲染

  3. Django实现websocket

    django实现websocket大致上有两种方式,一种channels,一种是dwebsocket.channels依赖于redis,twisted等 一 dwebsocket 1 Django实现 ...

  4. kubernter相关内容

    1. Kubernetes 第一章:互联网架构的演变 随着1946年世界上第一台电子计算机的问世网络就随之出现了,只不过当初只是为了解决多个终端之间的连接,这就是局域网的雏形.后来,随着美国国防部高级 ...

  5. HDU - 4576 Robot(概率dp+滚动数组)

    题意:所有的格子围成一个圈,标号为1~n,若从格子1出发,每次指令告知行走的步数,但可能逆时针也可能顺时针走,概率都是1/2,那么问走了m次指令后位于格子l~r(1≤l≤r≤n)的概率. 分析: 1. ...

  6. UVA - 1611 Crane(起重机)(贪心)

    题意:输入一个1~n(1<=n<=10000)的排列,用不超过9^6次操作把它变成升序.每次操作都可以选一个长度为偶数的连续区间,交换前一半和后一半. 提示:2n次操作就足够了. 分析:从 ...

  7. vue.js实现自定义输入分页

    效果如下: html: <input type="text" value="1" v-model="page.page_my_selected& ...

  8. 中国移动携手华为百度展示5G应用,实现8K视频传输

    在今日举行的 2019 年百度云智峰会上,中国移动携手华为和百度,首次展示基于 SA 架构的 5G Vertical LAN (行业局域网)技术,承载 8K 实时会议系统,助力企业云办公.该技术可为合 ...

  9. 关于SI522替代FM17522和MFRC522的资料对比

    以下是SI522与FM17522.MFRC522的对比参数: SI522是完全PIN对PIN软硬件兼容MFRC522.CV520.FM17522,另外我们可提供一对一技术支持解决客户所遇到的问题: 1 ...

  10. 数据结构顺序表中Sqlist *L,&L,Sqlist *&L

    //定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...