Радиальные градиенты с непрозрачностью в PHP - PullRequest
3 голосов
/ 07 июля 2011

Мне нужно создать радиальный градиент PNG с непрозрачностью.Я просмотрел GDLib, но не вижу способа генерировать радиальные градиенты.Кто-нибудь знает способ с GDlib или любой другой графической библиотекой для PHP?

Полагаю, в худшем случае я мог бы генерировать его попиксельно, используя GDLib, но как вообще начать вычислять это??

Цель состоит в том, чтобы создать сексуальные фоновые PNG-эффекты освещения для веб-страниц.Пример эффекта можно увидеть в заголовке здесь , который использует это фоновое изображение .Я пробовал стандартные PNG с белым световым эффектом, но он не выглядит так же хорошо, как тонированное освещение, поэтому мои сгенерированные PNG будут учитывать цветовую схему веб-сайта.

Я предполагаю, что на стороне сервера это путьчтобы пойти, потому что поддержка браузером для радиальных градиентов CSS настолько неоднородна.

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Почему бы не использовать комбинацию imagecolorallocatealpha () и imageellipse () или imagefilledellipse () ?

Edit:

См. этот класс для примера того, что я имею в виду. Вы должны иметь возможность расширить это для поддержки альфа.

Edit2:

Я внес несколько изменений в класс выше, чтобы получить поддержку альфа. Он не идеален, но работает для эллипсов и подобных:

http://codepad.org/1eZ3Km0J

1 голос
/ 07 июля 2011

Полагаю, худший случай, который я мог бы генерировать это попиксельно с помощью GDLib, но как кто-то даже начинает делать математику на что?

Математика проста, alpha = max_alpha - (distance_to_center / radius), где расстояние евклидово, т.е. sqrt( (x1-x2)^2 + (y1-y2)^2 ).

1 голос
/ 07 июля 2011

Классическая хитрость видеоигры заключается в применении градиентной текстуры, а не в вычислении света. это идеальное применение для техники.

создайте градиент градаций серого в пиксельном измерении большого размера (квадрат 2048px является обычным), а несколько меньших (1024,512,256px и т. Д.) Выберите наиболее подходящий для вас (увеличение может привести к усилению полосы, уменьшение может вызвать муар ).

используйте функцию php gd, например imagecopymerge. в зависимости от цели вы можете сохранить результат при первом использовании.

...