2016-12-30 7 views
0

Из документов:PIL: Что происходит в Image.Blend(), когда я использую альфа, превышающую 1.0?

Создает новый файл интерполяцией между данными изображений, с использованием постоянного альфа. Оба изображения должны иметь одинаковый размер и режим. out = image1 * (1.0 - alpha) + image2 * alpha Если альфа 0.0, возвращается копия первого изображения. Если альфа 1.0, копия второго изображения возвращается. Нет никаких ограничений на значение альфа. При необходимости результат обрезается, чтобы вписаться в допустимый выходной диапазон.

Таким образом, нет ограничений на альфа, но что на самом деле происходит, когда вы используете значения, превышающие 1,0?

Изображение 1: enter image description here

Изображение 2: enter image description here

Изображение смешивается с альфа 100.0: enter image description here

+0

Вы попробовали? –

+0

Yup, но я хотел понять причины фанковых цветов. Я отредактирую вопрос с результирующим изображением. – whatwhatwhat

ответ

-1

Результаты полностью объяснены формулой вы цитируемом. Если alpha - 100, вы получаете image1 * -99 + image2 * 100, а затем результаты для каждого пикселя будут зажаты. Давайте посмотрим, что это означает для примера.

Пиксель, который я выбрал из лба шутника, имеет значение RGB (255, 194, 106). Примерный соответствующий пиксель от другого изображения (часть голубого неба в морском пейзаже) имеет значение RGB (1, 109, 217). Объединение их в соответствии с приведенным выше уравнением дает (25401, 8609, -10883), что явно выходит за рамки для всех трех диапазонов. Зажатие каждого цвета между 0 и 255 дает (255, 255, 0), который является чистым желтым, который вы видите на выходном изображении для этой области.

Почти все пиксели на выходном изображении будут иметь значения либо 0, либо 255 для каждой цветовой полосы (что приводит к очень насыщенным цветам). Только очень мало пикселей (возможно, ни один из этих изображений, я не проверял), где разница между двумя изображениями была очень мала, будут ли какие-либо промежуточные значения.