PHP Градиент отказывается менять цвет

Roman Grudov

Известный
Автор темы
211
84
Создаю линейный градиент на картинку
PHP:
<?php
$im = new Imagick('save.png');

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

$refl = $im;

$gradient = new Imagick();

$gradient->newPseudoImage($refl->getImageWidth(), $refl->getImageHeight(), 'gradient:transparent-white');

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

$canvas = new Imagick();

$width = $im->getImageWidth();
$height = $im->getImageHeight();

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

$canvas->compositeImage($im, imagick::COMPOSITE_SRCOVER, 0, 0);
$canvas->compositeImage($refl, imagick::COMPOSITE_SRCOVER, 20, $im->getImageHeight());
$canvas->writeImages("new.png", true);
Но почему-то при изменении цвета (к примеру, на blue) в этой строчке:
$gradient->newPseudoImage($refl->getImageWidth(), $refl->getImageHeight(), 'gradient:transparent-white');
Градиент по прежнему остаётся белым 😕
1662994050552.png
 
Решение
PHP:
$refl->compositeImage($gradient, imagick::COMPOSITE_DSTOUT, 0, 0);

В данном коде тебе не позволяет константа COMPOSITE_DSTOUT добиться твоего эффекта, вот тебе список доступных https://www.php.net/manual/ru/imagick.constants.php#imagick.constants.compositeop , а так попробуй поставить к примеру COMPOSITE_DISSOLVE и увидишь эффект.

Так-же если у тебя ImageMagick 6.2.9 или выше можешь использовать setImageOpacity чтоб указать степень прозрачности наложения

im0rg

Известный
Друг
587
214
PHP:
$refl->compositeImage($gradient, imagick::COMPOSITE_DSTOUT, 0, 0);

В данном коде тебе не позволяет константа COMPOSITE_DSTOUT добиться твоего эффекта, вот тебе список доступных https://www.php.net/manual/ru/imagick.constants.php#imagick.constants.compositeop , а так попробуй поставить к примеру COMPOSITE_DISSOLVE и увидишь эффект.

Так-же если у тебя ImageMagick 6.2.9 или выше можешь использовать setImageOpacity чтоб указать степень прозрачности наложения
 
  • Влюблен
Реакции: Roman Grudov