首先就得要打开imagick扩展,网上上有教程,windows下记得imagick版本要对应,虽然imagick在帧数多的情况下比较慢,但是效果不错。
记得不是当前目录 要写路径,包括字体也是一样的,代码如下:
$image_name = 'img.gif'; //名字随便写
function createTextImagickDraw($fontSize = 12, $fillColor = '', $underColor = '', $font = 'simsun.ttc') {
$draw = new ImagickDraw();
$draw - >setFont($font);
$draw - >setFontSize($fontSize);
//$draw->setGravity(Imagick::GRAVITY_SOUTHEAST);//设置水印位置
if (!empty($underColor)) $draw - >setTextUnderColor(new ImagickPixel($underColor));
if (!empty($fillColor)) $draw - >setFillColor(new ImagickPixel($fillColor));
return $draw;
}
function createWaterImagickDraw($waterImg = 'water.png', $x = 10, $y = 85, $width = 16, $height = 16) {//这里根据水印大小设置 最好x y能自己先检测判断位置
$water = new Imagick($waterImg);
//$second->setImageOpacity (0.4);//设置透明度
$draw = new ImagickDraw();
//$draw->setGravity(Imagick::GRAVITY_CENTER);//设置位置
$draw - >composite($water - >getImageCompose(), $x, $y, $width, $height, $water);
return $draw;
}
$image = new Imagick($image_name);
$animation = new Imagick();
$animation - >setFormat("gif");
$image = $image - >coalesceImages();
$unitl = $image - >getNumberImages();
$drawImg=createWaterImagickDraw('warter.png');
for ($i = 0; $i < $unitl; $i++) {
$image - >setImageIndex($i);
$thisimage = new Imagick();
$thisimage - >readImageBlob($image);
$delay = $thisimage - >getImageDelay();
$thisimage - >annotateImage(createTextImagickDraw(12, 'red'), 30, 100, 0, '阿维卡');//文字水印
$thisimage - >annotateImage(createTextImagickDraw(12, 'green'), 10, 120, 0, 'http://xyxgo.com');
$thisimage - >annotateImage(createTextImagickDraw(12, 'blue'), 10, 140, 0, 'http://www.eduyo.com');
$thisimage - >drawImage($drawImg);//图片水印
$animation - >addImage($thisimage);
$animation - >setImageDelay($delay);
}
$animation - >writeImages('new/'.$image_name, true);
header("Content-Type: image/gif");
echo $animation - >getImagesBlob();