百度空间 | 百度首页 
               
 
查看文章
 
MagickWand For PHP的学习 例子(1)
2007-07-11 16:40

MagickWand For PHP的学习 例子(1)

http://www.wapdaily.com/icej/blog/article.asp?id=469

[ 2005-11-11 14:18:03 | 作者: 瞄瞄 | 收藏本页到:ViVi | 365key this!]
字体大小: | |
这两天正为PHP的GD库带的是2.0.28发愁....这破玩意带的是可以CREATE GIF但不能CREATE ANIM GIF的版本,2.0.29就可以但他不支持....正在郁闷时BOSS说用MagickWand(就是ImageMagic)就可以....狂倒以为他只有DLL版本没有Linux的...

后来发现原来不仅Linux windows支持,而且还有 C C++ Perl php java的Api...记得当初为了java做gif图没少费劲....现在想想实在太年轻啊...早知道何必如此累...
安装方法网上还算丰富...WINDOWS版本的就下一个DLL似乎就行,然后把他写到php.ini里,当然我下的全..ImageMagic和dll都装了

关于他的例子很少...所以我就一边看文档一边尝试下几个练练
1.Copy图片
先要得到一个图片资源,所以必须NewMagickWand(),然后就是读图片,图片GIF JPg 而且可以自动转换图片格式...如读入JPG输出GIF都是可以的,但是如果是anim的gif读取近来在输入就会成为一桢的gif
$nmw =NewMagickWand();
MagickReadImage($nmw,"cert.jpg");
echo MagickGetNumberImages($nmw);
MagickWriteImage($nmw,"cert2.gif");
DestroyMagickWand($nmw);
这时候就要用到MagickWriteImages替换MagickWriteImage,看好只多一个s就不一样了
$nmw =NewMagickWand();
MagickReadImage($nmw,"cert.gif");
echo MagickGetNumberImages($nmw);
MagickWriteImages($nmw,"cert2.gif",TRUE);
DestroyMagickWand($nmw);
MagickWriteImages默认参数是2个,最后一个如果是multi的图片就需要打true,默认是false,这样就可以copy多桢gif

MagickWand For PHP 学习 例子 生成图片(二)

http://www.wapdaily.com/icej/blog/article.asp?id=469

[ 2005-11-11 16:16:15 | 作者: 瞄瞄 | 收藏本页到:ViVi | 365key this!]
字体大小: | |
下面的例子是读取一张原图,经过设置画笔颜色,粗细,透明度后画线,在浏览器显示图片,注释的是存本地图片
Header("Content-type: image/jpg");
$nmw =NewMagickWand();
$ndw=NewDrawingWand();
$npw=NewPixelWand("black");
DrawSetStrokeColor($ndw,$npw);
DrawSetStrokeWidth($ndw,20);
DrawSetStrokeAlpha($ndw,0.8);//0<alpha<1
//DrawSetStrokeDashArray(); 不知道是做什么的?网上说是线形?
//$dash=DrawGetStrokeDashArray($ndw);

//echo 'alpha:'.DrawGetStrokeAlpha($ndw);
DrawLine($ndw,20,20,100,100);
MagickReadImage($nmw,"google.jpg");
//echo ' nums images:'.MagickGetNumberImages($nmw);
MagickDrawImage($nmw,$ndw);
MagickEchoImageBlob($nmw);
//MagickWriteImage($nmw,"google4.jpg"); 本地存图
DestroyDrawingWand($ndw);//注销资源
DestroyPixelWand($npw);
DestroyMagickWand($nmw);

直接生成图片,不先读取本地图片资源在生成...操作时一定记着设置图片格式..我就是因为这里搞了好久才做出来;而且还要设置延迟....我不知道我写的是否一定正确..我很奇怪为什么空白图要先建立个新图片然后还要设置延迟....也许NewMagickWand的时候并没有图层吧?
Header("Content-type: image/gif");
$nmw =NewMagickWand();
$ndw=NewDrawingWand();
$black=NewPixelWand("black");
$white=NewPixelWand("white");
DrawSetStrokeColor($ndw,$white);
MagickNewImage($nmw,200,200,$black);
MagickSetFormat($nmw,"GIF");
MagickSetImageDelay($nmw, 2);
DrawLine($ndw,20,20,100,100);
MagickDrawImage($nmw,$ndw);
MagickEchoImageBlob($nmw);
DestroyDrawingWand($ndw);
DestroyPixelWand($npw);
DestroyMagickWand($nmw);
生成anim的gif图只要在加几个图层,然后使用MagickEchoImagesBlob,多个s,就可以了
下面是国外找到的anim gif代码

  

[技术笔记]如何用PHP+MagickWand自动生成Gif动画

强大的MagickWand库,难以置信的简单。

<?
$array = array(
"X02.jpg",
"X03.jpg");
$mw = NewMagickWand();
for($i=0; $i<count($array);$i++) {
    $rw = NewMagickWand();
    MagickReadImage($rw,$array[$i]);
    MagickSetImageDelay($rw,300);  //300=3秒
    MagickAddImage($mw,$rw);
    DestroyMagickWand($rw);
}
MagickSetFormat($mw,"gif");
MagickWriteImages($mw,"animate.gif",MagickTrue);
$mw = DestroyMagickWand($mw);
?>

效果图:

animate.gif

用PHP+MagickWand自动生成Gif动画

http://ottoman51770.bokee.com/6234213.html

关键词MagickWand    Gif动画    自动                                           

<?
$array = array(
"X02.jpg",
"X03.jpg");

$mw = NewMagickWand();

for($i=0; $i<count($array);$i++) {
    $rw = NewMagickWand();
    MagickReadImage($rw,$array[$i]);
    MagickSetImageDelay($rw,300);   //300=3秒
    MagickAddImage($mw,$rw);
    DestroyMagickWand($rw);
}
MagickSetFormat($mw,"gif");
MagickWriteImages($mw,"animate.gif",MagickTrue);

$mw = DestroyMagickWand($mw);
?>

类别:待研究文章 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu