Можете ли вы получить прозрачный градиент с помощью PHP ImageMagick?

Что-то под мелодию:

$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 для получения дополнительной информации о градиентах рендеринга.