Оказывается, если изображение, которое вы клонируете, не имеет набора альфа-каналов, вы не можете создать градиент с изображения на прозрачный фон (по крайней мере, я не смог найти способ) Что вы можете сделать это тест для альфа-канала и, если нужно, установите его. Вот рабочий код, если вы заинтересованы:
$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);
Что? Даун голосов без комментариев по супер старым вопросам разочаровывает. – Matt