Подмодуль ImageChops
содержит ряд арифметических операций с изображениями, называемых операциями с каналами (chops
). Их можно использовать для различных целей, включая специальные эффекты, композицию изображений, алгоритмическое рисование и многое другое.
В настоящее время большинство операций с каналами реализовано только для 8-битных изображений (например, 'L'
и 'RGB'
).
Большинство операций с каналами принимают один или два изображения и возвращают новое изображение. Если не указано иное, результат операции канала всегда обрезается до диапазона от 0 до 255.
Все представленные ниже операции легко повторяются при помощи модуля NumPy
. Дополнительно смотрите материал "Функция Image.fromarray() модуля Pillow в Python".
ImageChops.add()
накладывает два изображения, делит результат на масштаб и добавляет смещение,ImageChops.add_modulo()
накладывает два изображения, не обрезая результат,ImageChops.blend()
смешивает два изображения,ImageChops.composite()
создает композицию из 2-х изображений,ImageChops.constant()
заполняет канал уровнем серого,ImageChops.darker()
возвращает изображение, содержащее более темные пиксели,ImageChops.difference()
возвращает попиксельную разницу между двумя изображениями,ImageChops.duplicate()
копирует каналы изображения,ImageChops.invert()
инвертирует изображение,ImageChops.lighter()
возвращает изображение, содержащее более светлые пиксели,ImageChops.logical_and()
логическое AND
между двумя изображениями,ImageChops.logical_or()
логическое OR
между двумя изображениями,ImageChops.logical_xor()
логическое XOR
между двумя изображениями,ImageChops.multiply()
накладывает два изображения друг на друга,ImageChops.soft_light()
накладывает два изображения друг на друга по алгоритму Soft Light,ImageChops.hard_light()
накладывает два изображения друг на друга по алгоритму Hard Light,ImageChops.overlay()
накладывает два изображения друг на друга по алгоритму Overlay,ImageChops.offset()
смещает изображение по x
и y
,ImageChops.screen()
накладывает два перевернутых изображения друг на друга,ImageChops.subtract()
вычитает изображение, делит результат на масштаб и добавляет смещение,ImageChops.subtract_modulo()
вычитает изображение, не обрезая результат .ImageChops.add(image1, image2, scale=1.0, offset=0)
:Метод ImageChops.add()
накладывает 1-е изображение image1
на второе image2
, делит результат на масштаб scale
и добавляет смещение offset
.
Если scale
и offset
опущены, то масштаб по умолчанию равен 1,0, а смещение - 0,0.
Формула для ImageChops.add()
при обработке изображения в NumPy
.
arr_out = ((arr_image1 + arr_image2) / scale + offset)
ImageChops.add_modulo(image1, image2)
:Метод ImageChops.add_modulo()
накладывает два изображения, не обрезая результат.
Формула для ImageChops.add_modulo()
при обработке изображения в NumPy
, где MAX=255
для 8-битных изображений.
arr_out = ((arr_image1 + arr_image2) % MAX)
ImageChops.blend(image1, image2, alpha)
:Метод ImageChops.blend()
смешивает два изображения, используя постоянный вес прозрачности. Псевдоним для Image.blend()
.
Формула для ImageChops.blend()
при обработке изображения в NumPy
.
arr_out = arr_image1 * (1.0 - alpha) + arr_image2 * alpha
ImageChops.composite(image1, image2, mask)
:Метод ImageChops.composite()
создает композицию из 2-х изображений image1
и image2
, используя маску прозрачности mask
. Псевдоним для Image.composite()
.
Формула для ImageChops.composite()
при обработке изображения в NumPy
.
для маски в режиме `1` arr_out = arr_mask * arr_image1 + (1 - arr_mask) * arr_image2 для маски в режиме `L` arr_out = arr_mask / 255 * arr_image1 + (1 - arr_mask / 255 ) * arr_image2
ImageChops.constant(image, value)
:Метод ImageChops.constant()
заполняет канал заданным уровнем серого.
ImageChops.darker(image1, image2)
:Метод ImageChops.darker()
сравнивает два изображения, пиксель за пикселем, и возвращает новое изображение, содержащее более темные значения.
Формула для ImageChops.darker()
при обработке изображения в NumPy
.
arr_out = min(arr_image1, arr_image2)
ImageChops.difference(image1, image2)
:Метод ImageChops.difference()
возвращает абсолютное значение попиксельной разницы между двумя изображениями.
Формула для ImageChops.difference()
при обработке изображения в NumPy
.
arr_out = abs(arr_image1 - arr_image2)
ImageChops.duplicate(image)
:Метод ImageChops.duplicate()
копирует каналы изображения. Псевдоним для метода Image.copy()
.
ImageChops.invert(image)
:Метод ImageChops.invert()
инвертирует изображение (канал).
Формула для ImageChops.invert()
при обработке изображения в NumPy
, где MAX=255
для 8-битных изображений.
arr_out = MAX - arr_image
ImageChops.lighter(image1, image2)
:Метод ImageChops.lighter()
сравнивает два изображения, пиксель за пикселем, и возвращает новое изображение, содержащее более светлые значения.
Формула для ImageChops.lighter()
при обработке изображения в NumPy
.
arr_out = max(arr_image1, arr_image2)
ImageChops.logical_and(image1, image2)
:Метод ImageChops.logical_and()
логическое AND
между двумя изображениями.
Оба изображения должны иметь режим 1
. Если необходимо выполнить логическое AND
над изображением с режимом, отличным от 1
, необходимо использовать функцию ImageChops.multiply()
, а в качестве второго изображения применить черно-белую маску.
Формула для ImageChops.logical_and()
при обработке изображения в NumPy
.
arr_out = ((arr_image1 and arr_image2) % MAX)
ImageChops.logical_or(image1, image2)
:Метод ImageChops.logical_or()
логическое OR
между двумя изображениями.
Оба изображения должны иметь режим 1
.
Формула для ImageChops.logical_or()
при обработке изображения в NumPy
.
arr_out = ((arr_image1 or arr_image2) % MAX)
ImageChops.logical_xor(image1, image2)
:Метод ImageChops.logical_xor()
логическое XOR
между двумя изображениями.
Оба изображения должны иметь режим 1
.
Формула для ImageChops.logical_xor()
при обработке изображения в NumPy
.
arr_out = ((bool(arr_image1) != bool(arr_image2)) % MAX)
ImageChops.multiply(image1, image2)
:Метод ImageChops.multiply()
накладывает два изображения друг на друга
Если умножить изображение на сплошное черное изображение, то результат будет черным. Если умножить на сплошное белое изображение, то изображение не изменится.
Формула для ImageChops.multiply()
при обработке изображения в NumPy
, где MAX=255
для 8-битных изображений.
arr_out = arr_image1 * arr_image2 / MAX
ImageChops.soft_light(image1, image2)
:Метод ImageChops.soft_light()
накладывает два изображения друг на друга с помощью алгоритма Soft Light.
ImageChops.hard_light(image1, image2)
:Метод ImageChops.hard_light()
накладывает два изображения друг на друга с помощью алгоритма Hard Light.
ImageChops.overlay(image1, image2)
:Метод ImageChops.overlay()
накладывает два изображения друг на друга с помощью алгоритма Overlay.
ImageChops.offset(image, xoffset, yoffset=None)
:Метод ImageChops.offset()
возвращает копию изображения, где данные были смещены на заданное расстояние xoffset
.
Данные переносятся по краям. Если yoffset
опущен, то предполагается, что оно равно xoffset
.
Принимаемые аргументы:
image
: Входное изображение.xoffset
: Расстояние в пикселях по горизонталиyoffset
: Расстояние в пикселях по вертикали.ImageChops.screen(image1, image2)
:Метод ImageChops.screen()
накладывает два перевернутых изображения друг на друга
Формула для ImageChops.screen()
при обработке изображения в NumPy
, где MAX=255
для 8-битных изображений.
arr_out = MAX - ((MAX - arr_image1) * (MAX - arr_image2) / MAX)
ImageChops.subtract(image1, image2, scale=1.0, offset=0)
:Метод ImageChops.subtract()
вычитает два изображения image1
и image2
, делит результат по масштабу scale
и добавляет смещение offset
.
Если scale
и offset
опущены, то масштаб по умолчанию равен 1,0, а смещение - 0,0.
Формула для ImageChops.subtract()
при обработке изображения в NumPy
.
arr_out = ((arr_image1 - arr_image2) / scale + offset)
ImageChops.subtract_modulo(image1, image2)
:Метод ImageChops.subtract_modulo()
вычитает два изображения image1
и image2
, не обрезая результат
Формула для ImageChops.subtract_modulo()
при обработке изображения в NumPy
, где MAX=255
для 8-битных изображений.
arr_out = ((arr_image1 - arr_image2) % MAX)