上次说到ImageChops模块,这次说下ImageColor。(先把上篇欠的图补上)上篇的末尾提到《星月夜》的补图,乌云的补图。又鉴于这次的文章没啥视觉冲击。把这两张图放出来看看。
补色:
乌云原图:
处理:
发完了,接下来进入主题吧。来谈谈我们的ImageColor module。这个模块很简单,我们只说两个方法。然后,我们详谈下,颜色的命名。
一、getrgb()方法:
方法的功能望文生义(又是这个词,我要吐了,你是真的没什么文采。没文化,还不是莽夫,都不知道自己系拉个~)即可,就是得到颜色的rgb值。参数当然就是个颜色的字符串名字,后面我们会详谈字符串的命名方式。
简单看下方法的功能,这里的颜色我们用最简单的命名方式,也是我们最常用的:‘red’。给这种起名的方法起个名字吧,叫“直接拼”,好接地气地说。(我喜欢~~~)
from PIL import ImageColor
def color():
color = 'red'
print(ImageColor.getrgb(color))
if __name__ == '__main__':
color()
代码很简单,也很好理解,直接看下结果吧。
显示出了红色的rgb值。
二、getcolor()方法:
第二个方法,其实和getrgb()方法差不多,也是得到颜色值,但是多了一个参数,可以指定mode。
from PIL import ImageColor
def color():
color = 'red'
print(ImageColor.getrgb(color))
print(ImageColor.getcolor(color, 'RGB'))
print(ImageColor.getcolor(color, 'RGBA'))#ValueError
if __name__ == '__main__':
color()
用两个例子,依旧是得到‘red’的颜色值,mode分别是‘RGB’和‘RGBA’。看下结果:
如果颜色的命名识别不出,或者mode无法解析,会弹出ValueError的异常。
总结下,这两种方法的功能,就是:
convert a color string to an RGB tuple.(原话)
这是ImageColor module的两个主要方法。接下来我们详细说下,颜色的命名方式。
我们在用一些颜色的时候,除了直接拼写单词外,最经常用的就是十六进制的表示方式。比如#f00代表红色,#00f代表蓝色等。这两种方式我们在各种语言中会经常使用,而且在写网页时,也常用这两种方式来设置颜色属性。比如:
<div style="color=#fff">之类的。(这里不知道写的对不对哈,有点忘了。)
我们来看下,其他的表示颜色的命名。
RGB方法,命名形式是这样的:rgb(red,green,blue)。三颜色参数,分别表示色道值,在0-255之间。也可用0-100%来进行赋值。这和我们html里面设置长宽有些类似,我们除了width:500px之外,还可以用width:50%来表示。
HSL方法,Hue-Saturation-Lightness。色调,饱和度,明度。表示形式:hsl(h, s, l)。Hue(色调)的取值在0-360之间,0代表red,120代表green,240代表blue。Saturation(饱和度)取值0-100%,0代表灰(gray),100代表全颜色(full color)。Lightness(明度)取值也在0-100%,0代表black,50位normal(正常),100位white。
HSV方法,和HSL同,除了V(value),取值0-100%,0为black,100位normal。还有一种,HSB,B(brightness)亮度,参数要求和HSV相同。
还有一点需要说明,颜色命名大小写不敏感,什么意思,就是‘rgb’和‘RGB’没差。
我们用刚刚的getrgb()方法整体来搞下,说明情况:
from PIL import ImageColor
def fuc():
print(ImageColor.getrgb('rgb(255, 0, 0)'))
print(ImageColor.getrgb('rgb(100%, 0%, 0%)'))
print(ImageColor.getrgb('hsl(0, 100%, 50%)'))#hue 0-360 0r 120g 240b saturation 0-100% 0灰色 100全彩 lightness 0黑 50正常 100白 高速逻辑函数什么鬼 色调 饱和度 亮点
print(ImageColor.getrgb('hsv(0, 100%, 100%)'))#hue saturation value 0-100% 0黑 100正常
print(ImageColor.getrgb('hsb(0, 100%, 100%)'))#brightness
print(ImageColor.getrgb('red'))
print(ImageColor.getrgb('RED'))
if __name__ == '__main__':
fuc()
也就是说,以上的命名方法,全都表示红色。你get到了吗?
后记:
括号内的内容为第二次审看添加内容,旨在引起您阅读时极大的舒适。