php使用Imagick给图片写文字加阴影效果

给图片上写文字常见的需求,php使用 Imagick结合ImagickDraw变可轻松实现

简单例子:

$canvas = new Imagick();
$canvas->newImage(500, 200, 'white');
$canvas->setImageFormat('png');

$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#f00'));
$draw->setFontSize(50);
$draw->annotation(100, 60, 'welcome');
$canvas->drawImage($draw);

$draw->setFillColor(new ImagickPixel('#fff'));
$draw->setFontSize(50); 
$draw->annotation(100, 120, 'welcome');
$canvas->drawImage($draw);

header("Content-type: image/{$canvas->getImageFormat()}");
echo $canvas->getImageBlob();

 运行后效果:

php使用Imagick给图片写文字加阴影效果_第1张图片

代码中 新建了一个 白色的图片 当作尝试要 加文字的图片, 共加了两行文字,第一行 红色, 第二行 白色,,运行后发现 白色的文字看不见

遇到问题:   当要写的文字颜色 跟 图片 颜色 相近时,文字并不能很好的展现出来(注:背景图片为用户上传,文字颜色为用户自行选择)

产品提出: 给文字加阴影。。

。。。。。愁死我了。尝试了几种加阴影的方法 效果跟设计出来的 不一样,效果很差

。。。。经过几度调研 尝试,查资料。找到一个方法,效果很接近 设计图。。 贴上

$canvas = new Imagick();
$canvas->newImage(500, 200, 'white');
$canvas->setImageFormat('png');

$text = new Imagick();
$text->newImage(500, 200, 'none');
$text->setImageFormat('png');

$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#f00'));
$draw->setFontSize(50);
$draw->annotation(100, 60, 'welcome');
$text->drawImage($draw);

$draw->setFillColor(new ImagickPixel('#fff'));
$draw->setFontSize(50); 
$draw->annotation(100, 120, 'welcome');
$text->drawImage($draw);

$shadow_layer = $text->clone();
$shadow_layer->setImageBackgroundColor(new ImagickPixel('#555'));
$shadow_layer->shadowImage(80, 0.8, 0, 0);
$shadow_layer->compositeImage($text, Imagick::COMPOSITE_OVER, 0, 0 );
$canvas->compositeImage($shadow_layer, imagick::COMPOSITE_DEFAULT, 0, 0);

header("Content-type: image/{$canvas->getImageFormat()}");
echo $canvas->getImageBlob();

运行后:

php使用Imagick给图片写文字加阴影效果_第2张图片

你可能感兴趣的:(日常工作,php,canvas,文字阴影)