Ответ 1
Документация для этой функции практически не говорит. Поэтому позвольте мне немного прояснить это. Во-первых, размеры изображений не имеют значения, работает ли функция или нет, она внутренне проверяет размер, который оба изображения соответствуют.
Теперь, когда вы можете сравнить изображения с помощью функции ImageChops.difference
?
Во-первых, оба изображения должны иметь пиксели, которые могут быть сохранены в байтах без знака. Это очень распространенный тип изображения, но это исключает сравнение изображений, даже если они являются одним и тем же режимом. Таким образом, вы не можете сравнивать изображение x
и y
, когда один или/оба/из них имеют режим: F
, I
, I;16
, I;16L
, I;16B
, BGR;15
, BGR;16
, BGR;24
или BGR;32
. Просто чтобы было ясно: неважно, находятся ли оба изображения в одном и том же режиме, если они находятся в одном из режимов выше, функция откажется работать.
Таким образом, сравнение может быть выполнено, когда изображения находятся в режимах 1
, P
, L
, LA
, RGB
, RGBA
, RGBX
, RGBA
, CMYK
или YCbCr
, если они имеют одинаковое количество полос. Это означает, что изображения не должны сравнивать один и тот же режим. Например, difference(x.convert('CMYK'), x.convert('RGBA'))
или difference(x.convert('1'), x.convert('P'))
работают нормально. Конечно, это означает difference(x.convert('LA'), x.convert('L'))
, терпит неудачу. Наконец, результирующее изображение всегда будет иметь режим, равный первому изображению, переданному функции.
Это действительно, по крайней мере, для PIL 1.1.7.