Почему закрашивают цвета в библиотеке изображений python? - PullRequest
2 голосов
/ 07 марта 2012

Я пытаюсь нарисовать фигуры цветами, с помощью этого чрезвычайно простого куска кода:

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

Мой первый прямоугольник будет КРАСНЫМ, а второй СИНИМ. Я знаю, что значения не одинаковы: одно - строка, другое - целое число, но, очевидно, программа должна интерпретировать это так же, не так ли? Или я упускаю из виду простую вещь? Я рисую градиенты с целыми числами и обнаружил это странное поведение. Спасибо за любые рекомендации.

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Ну, так как вы не получили одинаковые цвета, очевидно библиотека, мы не интерпретируем их одинаково.

В первой форме у вас есть цвет, который указан в именах HTML и CSS - строка, и вы могли бы использовать слова «красный» и «синий» так же, как вы использовали «# ff0000» - Вкл.во второй форме вы фактически передаете ему целое число, которое будет представлять цвет.Поскольку вместо синего отображается красный, порядок байтов меняется при вводе цветов в этом формате - попробуйте вместо этого 0x0000FF.(т.е. вместо RGB требуется BGR)

Если вы используете числа, а не строки, учтите, что вы также можете отправить 3-кортеж со значениями RGB, как в draw.rectangle( [(0,128),(256,256)], fill=(255, 0,0) ) (делая это таким образомтакже использует RGB)

«реальность - это то, что вам сойдет с рук» *

1 голос
/ 07 марта 2012

Это не поддерживает.Вот что поддерживается:

Имена цветов

В PIL 1.1.4 и более поздних версиях вы также можете использовать строковые константы при рисовании в изображениях "RGB".PIL поддерживает следующие строковые форматы:

Шестнадцатеричные спецификаторы цвета, заданные как "#rgb" или "#rrggbb".Например, «# ff0000» определяет чистый красный.

Функции RGB, заданные как «rgb (красный, зеленый, синий)», где значения цвета являются целыми числами в диапазоне от 0 до 255. В качестве альтернативы, значения цветаможет быть дано как три процента (от 0% до 100%).Например, «rgb (255,0,0)» и «rgb (100%, 0%, 0%)» оба определяют чистый красный.

Функции Hue-Saturation-Lightness (HSL), заданные как«hsl (hue, saturation%, lightness%)», где hue - это цвет, представленный в виде угла от 0 до 360 (красный = 0, зеленый = 120, синий = 240), насыщенность - от 0% до 100% (серый = 0%, полный цвет = 100%), а яркость - это значение между 0% и 100% (черный = 0%, нормальный = 50%, белый = 100%).Например, «hsl (0,100%, 50%)» чисто красного цвета.

Общие названия цветов HTML.ImageDraw предоставляет около 140 стандартных имен цветов, основанных на цветах, поддерживаемых системой X Window и большинством веб-браузеров.Имена цветов нечувствительны к регистру и могут содержать пробелы.Например, «красный» и «красный» определяют чистый красный.

Модуль ImageDraw

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...