【问题标题】:Can You Get a Transparent Gradient using PHP ImageMagick?你可以使用 PHP ImageMagick 获得透明渐变吗?
【发布时间】:2011-01-18 17:41:19
【问题描述】:

一些事情的曲调:

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

基本上,我希望为上传的图像创建湿地板效果。到目前为止,您似乎只能将渐变创建为纯色。

【问题讨论】:

  • 什么?在超级老问题上没有 cmets 的反对票令人沮丧。

标签: php imagemagick


【解决方案1】:

事实证明,如果您要克隆的图像没有设置 alpha 通道,则您无法创建从图像到透明背景的渐变(至少,我无法找到方法)您可以做的是测试 alpha 通道并在需要时进行设置。如果您有兴趣,这是工作代码:

$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);

【讨论】:

    【解决方案2】:

    透明渐变的颜色代码是“无”。

    例如,此程序在 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

    【讨论】:

    • 我应该更具体地说,我正在将渐变合成到图像中。我希望图像淡入透明背景。您的方法会从图像淡化为红​​色背景。使用 none-none 没有渐变。我发现了一种可以完美运行的方法,稍后我会发布它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多