我正在尝试用颜色绘制形状,这段代码非常简单:
from PIL import Image, ImageDraw
img = Image.new( "RGB", (256,256))
draw = ImageDraw.Draw(img)
draw.rectangle( [(0,0),(256,128)], fill="#FF0000" )
draw.rectangle( [(0,128),(256,256)], fill=0xFF0000 )
# img.show()
img.save("test.png")
我的第一个矩形是红色,但第二个是蓝色。我知道值不一样:一个是字符串,另一个是整数,但显然程序应该以相同的方式解释它不应该吗?还是我忽略了一些直截了当的事情? 我用整数绘制渐变,发现了这种奇怪的行为。 感谢您提供任何指导。
答案 0 :(得分:1)
它不支持它。以下是支持的内容:
颜色名称
在PIL 1.1.4及更高版本中,您还可以在绘制时使用字符串常量 在“RGB”图像中。 PIL支持以下字符串格式:
十六进制颜色说明符,以“#rgb”或“#rrggbb”给出。对于 例如,“#ff0000”指定纯红色。
RGB功能,以“rgb(红色,绿色,蓝色)”的颜色给出 值是0到255范围内的整数。或者,颜色 值可以三个百分比(0%到100%)给出。例如, “rgb(255,0,0)”和“rgb(100%,0%,0%)”均指定纯红色。
色调 - 饱和度 - 亮度(HSL)函数,以“hsl(色调, 饱和度%,亮度%)“其中色调是作为角度给出的颜色 0到360之间(红色= 0,绿色= 120,蓝色= 240),饱和度是一个值 介于0%和100%之间(灰色= 0%,全色= 100%),亮度为a 值介于0%和100%之间(黑色= 0%,正常= 50%,白色= 100%)。对于 例如,“hsl(0,100%,50%)”是纯红色。
常见的HTML颜色名称。 ImageDraw提供了大约140个标准 颜色名称,基于X Window系统支持的颜色和 大多数网络浏览器颜色名称不区分大小写,可能包含 空白。例如,“红色”和“红色”都指定纯红色。
答案 1 :(得分:1)
好吧,既然你没有得到相同的颜色,显然图书馆我们不会以同样的方式解释它们。
第一个表单你有一个颜色,因为它在HTML和CSS名称中指定 - 一个字符串,你可以使用“红色”和“蓝色”这两个词,就像你使用“#ff0000”一样 - 在第二个表单上,您实际上传递了一个表示颜色的整数。由于它显示的是红色而不是蓝色,因此当您以此格式输入颜色时,字节顺序会反转 - 只需尝试0x0000FF即可。 (即它需要BGR而不是RGB)
如果您使用数字而不是字符串,请注意您也可以发送带有RGB值的3元组,例如draw.rectangle( [(0,128),(256,256)], fill=(255, 0,0) )
(这样做也使用RGB)
“现实就是你得到的东西”