为什么要在python图像库中筛选填充颜色?

为什么要在python图像库中筛选填充颜色?,python,imaging,Python,Imaging,我正在尝试用颜色绘制形状,使用这段极其简单的代码: 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

我正在尝试用颜色绘制形状,使用这段极其简单的代码:

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")
我的第一个矩形是红色的,但第二个是蓝色的。我知道值是不一样的:一个是字符串,另一个是整数,但显然程序应该以同样的方式解释它,不是吗?还是我忽略了一些简单的事情? 我用整数画梯度,发现了这种奇怪的行为。
感谢您的指导。

它不支持此功能。以下是支持的内容:

颜色名称

在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%)之间,亮度为 值介于0%和100%之间(黑色=0%,正常=50%,白色=100%)。对于 例如,“hsl(0100%,50%)为纯红色

常见的HTML颜色名称。ImageDraw提供了大约140个标准配置 颜色名称,基于X Window系统支持的颜色,以及 大多数网络浏览器。颜色名称不区分大小写,可能包含 空白。例如,“红色”和“红色”都指定纯红色


既然你没有得到相同的颜色,很明显图书馆让我们无法以相同的方式解读它们

第一种形式是HTML和CSS名称中指定的颜色——一个字符串,您可以像使用“#ff0000”一样使用“红色”和“蓝色”这两个词 在第二个表单上,实际上是传递一个表示颜色的整数。因为它显示的是红色而不是蓝色,所以当您以这种格式输入颜色时,字节顺序是相反的-只需尝试0x0000FF即可。(即需要BGR而不是RGB)

如果您使用的是数字而不是字符串,请注意,您也可以发送一个包含RGB值的三元组,如在
draw.rectangle([(0128),(256256)],fill=(255,0,0))
(这样做也会使用RGB)


“现实就是你得到的”

你是对的,它显然说明了支持什么。我只是认为输入整数就足够了,因为我使用过很多其他编程语言和图像处理库,而且该库也没有出现错误,因为如果传入错误的元组,可能会出现错误……这是开源的-为它们修复它!:)谢谢,简单地说:答案是库将普通整数解释为BGR而不是RGB,即使我在image mode参数中指定了它?我接受你的回答,因为它包含了问题的解决方案。