$image_name4=$process.'4.gif';$inimg3=$process.'1.jpg';$animation3 = new imagick(); $animation3->setformat(gif); $i=0; $image4 = new imagick(realpath($image_name4)); $image4 = $image4->coalesceimages();foreach($image4 as $frame){ if(!is_file($inimg3)){ echo '水印图像不存在'; } $img = new imagick(); $img->readimageblob($frame); $draw = new imagickdraw(); $draw->color(0,0,imagick::paint_floodfill); $water = new imagick(realpath($inimg3)); $draw->composite($water->getimagecompose(),0,0,320, 256,$water); $img->drawimage($draw); $animation3->addimage( $img ); $animation3->setimagedelay( $img->getimagedelay() );// $draw->destroy(); $water->destroy(); $img->destroy();}$animation3->writeimages($process.''.$id.'x.gif', true);//生成3x $animation3->destroy();
在linux 下报错,本地win7是好的:uncaught exception 'imagickexception' with message 'compositing image failed' 。
imagickdraw->composite(40, 0, 0, 320, 256, object(imagick)) #1 {main} thrown in
回复讨论(解决方案) 目测应该是你的linux下的php中没有imagick扩展。
linux上有这个。。版本也升到最新了
不是 new imagick();不行,而是单独
$draw->composite($water->getimagecompose(),0,0,320, 256,$water); 这一句执行不了
getimagecompose()
这个方法有返回值?
getimagecompose()
这个方法有返回值?
有的 这个设置gif延迟的,值为40. 最后还是放弃了composite方法 以后看怎么样能正确使用 再更新下吧