2011-01-18 4 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

透明グラデーションのカラーコードは「なし」です。たとえば、このプログラムは、100×100ピクセルの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

関連する問題