Можете ли вы получить прозрачный градиент, используя PHP ImageMagick? - PullRequest
1 голос
/ 18 января 2011

Что-то на мелодию:

$gradient->newPseudoImage($width, $height, "gradient:transparent-transparent");

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

Ответы [ 2 ]

8 голосов
/ 18 января 2011

Оказывается, если клонируемое изображение не имеет альфа-канала, вы не можете создать градиент от изображения до прозрачного фона (по крайней мере, я не смог найти способ) проверьте альфа-канал и установите его при необходимости. Вот рабочий код, если вам интересно:

$im = new Imagick('image.jpg');

if (!$im->getImageAlphaChannel()) {
    $im->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET);
}

$refl = $im->clone();
$refl->flipImage();

$gradient = new Imagick();

$gradient->newPseudoImage($refl->getImageWidth() + 10, $refl->getImageHeight() + 10, "gradient:transparent-black");

$refl->compositeImage($gradient, imagick::COMPOSITE_DSTOUT, 0, 0);

$canvas = new Imagick();

$width = $im->getImageWidth() + 40;
$height = ($im->getImageHeight() * 2) + 30;

$canvas->newImage($width, $height, 'none');
$canvas->setImageFormat('png');

$canvas->compositeImage($im, imagick::COMPOSITE_SRCOVER, 20, 10);
$canvas->compositeImage($refl, imagick::COMPOSITE_SRCOVER, 20, $im->getImageHeight() + 10);

Это выполнит мельницу jpg и преобразует ее в png с отражением, исчезающим на прозрачном фоне.

$canvas->writeImages("new.png", true);
1 голос
/ 18 января 2011

Код цвета для прозрачного градиента - "нет".

Например, эта программа сохраняет градиент от прозрачного (вверху) до красного (внизу) в PNG-изображении размером 100x100 пикселей:

$gradient = new Imagick();
$width = 100;
$height = 100;
$gradient->newPseudoImage($width, $height, 'gradient:none-red');
$gradient->setImageFormat('png');
$gradient->writeImage('test.png');

См. Документация по ImageMagick Canvas для получения дополнительной информации о рендеринге градиентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...