Pyvips Image Combo работает не так, как ожидалось - PullRequest
1 голос
/ 01 апреля 2019

При попытке компоновки изображений с помощью Pyvips 2.1.5:

import pyvips

i1 = pyvips.Image.black(100, 100, bands=4) + (255, 0, 0, 128)
i2 = pyvips.Image.black(10, 10, bands=4) + (0, 255, 0, 128)
i1.composite(i2, 'over').write_to_file('output.png')

Выводится зеленый квадрат размером 10x10px вместо ожидаемых 100x100px альфа-смешанных sq.

output.png

Компоновка нескольких файлов изображений (pyvips.Image.new_from_file) также работает нормально, но выполнить это с одним из сгенерированных изображений выше не удается из-за:

pyvips.error.Error: unable to call composite
composite: images do not have same numbers of bands

даже если все изображения bands возвращают 4.

Я правильно его использую?Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 02 апреля 2019

Ваш black() + (1, 2, 3, 4) сделает четырехполосное изображение с interpretation, установленным на multiband. composite это будет интерпретироваться как монохромное изображение с тремя дополнительными альфа-каналами (возможно, не самая лучшая догадка).

Вам необходимо установить интерпретацию sRGB. Вам не нужно устанавливать bands на черном 4, он будет автоматически добавлен RHS +.

.

Попробуйте:

import pyvips

i1 = (pyvips.Image.black(100, 100) + (255, 0, 0, 128)).copy(interpretation="srgb")
i2 = (pyvips.Image.black(10, 10) + (0, 255, 0, 128)).copy(interpretation="srgb")
i1.composite(i2, 'over').write_to_file('output.png')

Сделать:

result image

Тот же трюк должен исправить вашу проблему с наложением черного на файлы изображений.

...