imagecopyresampled в php - предварительно умноженный альфа выпуск - PullRequest
0 голосов
/ 24 февраля 2012

У меня проблема с imagecopyresampled для буферов, которые используют альфа-значения. по-видимому, алгоритм предварительно умножает альфа-значения пикселей перед фильтрацией, что приводит к появлению черных границ вокруг объектов.

Шаги для воспроизведения:

  • возьмите изображение, полностью белое в части RGB и имеющее белый цвет (сглаженный !!) (с кружком, а не с квадратом!) На черном фоне в альфа-части (так что альфа-часть будет иметь в основном полностью белые и полностью черные пиксели, а также некоторые градиентные пиксели на границах круга из-за сглаживания - это означает, что входное изображение НЕ предварительно умножается - оно является прямым / неформатированным, поскольку часть изображения RGB полностью белый).

  • уменьшить изображение наполовину, используя imagecopyresampled

  • скомпонуйте результат по полностью белому изображению

Что бы я ожидал: полностью белое изображение

Что я получу: сероватая окантовка вокруг контура круга

Я почти уверен, что это связано с предварительным умножением альфа в алгоритме масштабирования (алгоритм умножает альфа-значение пикселей на его значение rgb, чтобы вычислить новое значение rgb - таким образом, белые пиксели станут серыми)

Кто-нибудь знает обходной путь для этого?

1 Ответ

0 голосов
/ 24 февраля 2012

Я бы предложил попробовать магию изображения для php.

http://www.php.net/manual/en/imagick.resizeimage.php

http://www.php.net/manual/en/imagick.scaleimage.php

По моему опыту, все неприятности, связанные с отображением в php, просто исчезли.

...