Что-то под мелодию:
$gradient->newPseudoImage($width, $height, "gradient:transparent-transparent");
В основном я ищу создать эффект влажного пола для загруженных изображений. Пока, кажется, вы можете создать только градиент в сплошной цвет.
Оказывается, если у клонированного изображения нет набора альфа-каналов, вы не можете создать градиент от изображения на прозрачный фон (по крайней мере, я не смог найти способ). Что вы можете сделать, это проверить альфа-канал и установите его, если нужно. Вот вам рабочий код, если вам интересно:
$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);
Цветовой код для прозрачного градиента – «none».
Например, эта программа сохраняет градиент от прозрачного (сверху) до красного (снизу) в изображении PNG размером 100×100 пикселей:
$gradient = new Imagick(); $width = 100; $height = 100; $gradient->newPseudoImage($width, $height, 'gradient:none-red'); $gradient->setImageFormat('png'); $gradient->writeImage('test.png');
См. Документацию ImageMagick Canvas для получения дополнительной информации о градиентах рендеринга.