php里有两个图片处理库gd,imagick,gd比较老,并且效果不如imagick好。最近一个项目需要在一个背景图上添加logo和文字,用了imagick来画
<?php
class Image
{
private $image;
private $logoWidth = 57;//logo宽度
private $logoXSpace = 48;//logo横向间隔
private $logoYSpace = 50;//logo纵向间隔
private $startX = 40;
private $startY = 260;
public function __construct($bgImg)
{
$this->logoWidth = 57;//logo宽度
$this->logoXSpace = $this->logoWidth + 48;//logo横向间隔
$this->logoYSpace = $this->logoWidth + 50;//logo纵向间隔
$this->startX = 40;
$this->startY = 260;
$this->image = new Imagick($bgImg); //背景图
}
// 添加水印图片
public function addApp($logo, $name, $i)
{
list($x, $y) = $this->getIxy($i);
$watermark = new Imagick($logo);
$draw = new ImagickDraw();
$draw->composite($watermark->getImageCompose(), $x, $y, $watermark->getImageWidth(),
$watermark->getimageheight(), $watermark);
$name = mb_strimwidth($name, 0, 13, '...', 'UTF-8');
$draw->setFontSize(12);
$draw->setFont('/home/lijie/STXIHEI.TTF');
$draw->setFillColor(new ImagickPixel('rgb(0,0,0)'));
$draw->setTextAlignment(Imagick::ALIGN_CENTER);
$draw->annotation($x + 27, $y + 57 + 21, $name);
$this->image->drawImage($draw);
}
public function writeImage($file)
{
$this->image->writeImage($file);
}
public function getIxy($i)
{
return array(
$this->startX + $this->logoXSpace * ($i%4),
$this->startY + $this->logoYSpace * intval($i/4),
);
}
}
$image = new Image('/bgImg.png');
$image->addApp('/logo.png', '啦啦啦', 0);
$image->writeImage('/tmp/image.test.png');
header('Content-Type: image/png');
echo file_get_contents('/tmp/image.test.png');
效果如下