imagick 学习

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');
效果如下



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值