2011-01-18 6 views
1

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

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

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

+0

Что? Даун голосов без комментариев по супер старым вопросам разочаровывает. – Matt

ответ

8

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

$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

Цветовой код для прозрачного градиента - «none».

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

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

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

+0

Я должен быть более конкретным, я составлю градиент на изображение. Я хочу, чтобы изображение исчезло на прозрачном фоне. Ваш метод исчезнет с изображения на красном фоне. Использование none-none не имеет градиента. Я обнаружил метод, который будет работать отлично, и я опубликую его через мгновение. – Matt

Смежные вопросы