之前业务中用到的一个图片效果处理 备份下来,方便之后使用.
给图片上写文字的需求很常见. 实现起来也比较轻松
简单例子:
$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();
创建了一个白色底图, 并在上边写了两行字
一行红色的, 一行白色的. 由于底图颜色也是白色,所以 白色的字是看不到的
给文字加阴影
遇到同颜色的情况, 大部分都会采用给文字加阴影的方式
代码:
$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();
给文字设置阴影效果后 看起来舒服多啦