图集1/3

正文 7531字数 738,879阅读

1. 下载 ImageMagick
安装后不得请多试试几个版本 64位系统也可以安装32位的程序
ImageMagick-7.0.5-0-Q16-x64-dll
ImageMagick-6.2.7-6-Q16-windows-dll
Windows Server2012 64位用的是下面这个32位版才安装成功的
ImageMagick-6.8.4-0-Q16-x86-dll
多版本php环境记得修改php.ini里面的在运行php版本对应路径

2. 安装 ImageMagick
安装 ImageMagick 到 PC 上。安装路径不能出现空格,否则无法使用。安装时,一点选中把执行路径添加到 path 上,否则你就得手动去添加 path 路径了。


3. 测试安装
打开windows 命令行窗口(win+r -> “cmd” -> Enter),输入convert,回车。会出现convert的帮助文档,如果没有出现,说明没有安装成功,或没有把安装目录添加到环境变量 path 中。


4. 下载 php扩展 php_imagick.dll
下载地址 http://www.peewit.fr/imagick/
http://pecl.php.net/package/imagick/3.4.3/windows
php_imagick-3.2.0RC1-5.6-nts-vc11-x86
本站使用的是nts 32位版的dll
判断PHP 是ts还是nts版
通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。
Run code
Cut to clipboard


    5. 把dll文件重命名为php_imagick.dll,并放到php 扩展文件目录 php/ext 中。
    6. 在 php.ini 配置文件中添加,extension=php_imagick.dll。
    7. 重启电脑,只重启apache不管用的情况下,重启下PC。因为扩展底层使用的是imageMagic软件,所以软件重启电脑,重新加载软件,并刷新path路径。
    8. 重启后,打开 phpinfo页面,查看,扩展已经安装成功。如果还未安装成功,极有可能imagemagick软件版本过高,请选择更低一级的版本安装。
    9. PHP测试代码。
    <?php $im = new imagick( 'a.jpg' ); // resize by 200 width and keep the ratio $im->thumbnailImage( 200, 0); // write to disk $im->writeImage( 'a_thumbnail.jpg' );
    Run code
    Cut to clipboard


      10. 查看手册,学习API
      相关扩展学习手册地址 http://uk3.php.net/manual/zh/book.imagick.php]http://uk3.php.net/manual/zh/book.imagick.php]http://uk3.php.net/manual/zh/book.imagick.php 手册中包含大量易用实例。
      这里还有查看命令行参数的文档 http://www.imagemagick.org/Usage/

      windows7下安装php的imagick和imagemagick扩展教程
      php open_basedir restriction in effect. 的问题
      open_basedir='/var/www/html/:/usr/share/pear/';
      Run code
      Cut to clipboard

        如果是nginx环境,解决方法就是在/etc/nginx/fastcgi_params PHP_VALUE 中修改 "open_basedir=$document_root:$document_root/../:/usr/share/pear:/usr/share/php:/etc/phpMyAdmin:/tmp:/proc";
        Run code
        Cut to clipboard

          解决: 在/www下建立/tmp 并赋予权限
          Run code
          Cut to clipboard


            windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)
            php扩展 调试命令: 在cmd运行: php --ri imagick 1. 如果报错是:“php_imagick.dll' - %1 不是有效的 Win32 应用程序” ,则说明版本不相符合。 需要检查 imagick软件本身( 如x86 )、php本身( x86 ts (thread safe) )、php扩展php_imagick.dll (ts) 三方版本 要一致。 2. 如果报错是:“php.exe - 系统错误 ,无法启动此程序因为计算机丢失CORE_RL_wand_.dll ” , 说明你没有将 php_imagick-3.3.0-5.4-ts-vc9-x86.zip 扩展包中的“CORE_*.dll” 这些dll文件 放到 你的php.exe同级目录下。 ,只需要拷贝 CORE_*.dll 到php目录就可以解决了。 3. 如果php --ri imagick 显示的结果 ImageMagick number of supported formats: => 0 支持的图片格式数量为0,请看第5步需要新建一个环境变量。 4.如果php代码执行调用时报错:“ NoDecodeDelegateForThisImageFormat ”,表明你的php_imagick.dll的版本 并不支持或并不匹配 ImageMagick软件版本,这时候 php --ri imagick 的结果也显示为: ImageMagick number of supported formats => 0 。需要更换ImageMagick软件版本。
            Run code
            Cut to clipboard


              PHP中Imagick的使用
              ImageMagick 中文站
              Imagick::compositeImage
              Imagick::getImageFormat
              php 给图片增加背景平铺水印代码
              <?php $image = new imagick('logo.jpg'); $im = new imagick(); $im->newimage( 140, 80, new imagickpixel( "none" ) ); $draw = new imagickdraw(); $draw->setfillcolor(new imagickpixel( "grey" )); $draw->setgravity(imagick::gravity_northwest); $draw->annotation(10,10 ,'copyright'); $draw->setgravity(imagick::gravity_southeast); $draw->annotation(5,15 ,'copyright'); $im->drawimage( $draw); $image = $image->textureimage($im); $image->compositeimage($image,imagick::composite_copy,0,0); header( "content-type: image/{$image->getimageformat()}" ); $image->writeimage('wmark_text_tiled.jpg'); $image->clear(); $image->destroy();
              Run code
              Cut to clipboard


                上传图片并添加水平平铺水印实例完整代码 文字水印,图片水印
                <?php include 'db.php'; if(!$uligon){ header('Location:/login.php'); exit; } if(date('j',$ttitme)>$conf['my']) exit('本月作品'.$conf['my'].'号之后禁止修改!'); $file=$_FILES["file"]["tmp_name"]; if(!$file) exit('图片上传失败!'); $image = new imagick($file); $syxzsssyxzss=$conf['syxz']; if($conf['syxzss']) $syxzsssyxzss=rand(-360,360);//水印旋转 if($conf['syxzssf']==1){ $im = new imagick(); $im->newimage( $conf['sykd'], $conf['sygd'], new imagickpixel( "none" ) ); //水印高度 宽度 背景色 $draw = new imagickdraw(); $draw->setfillcolor(new imagickpixel( $conf['syys'] ));//水印颜色 //$draw->setgravity(imagick::gravity_northwest); $draw->setFont('simsun.ttc');//水印字体 $waterText=$conf['sy']; $draw->annotation($conf['syzb'],$conf['syyb'] ,$waterText);//水印文字 左 上距离 //$draw->setgravity(imagick::gravity_southeast); //$draw->annotation(5,15 ,'copyright');//多重水印 $im->drawimage( $draw); $im->rotateImage(new ImagickPixel('none'), $syxzsssyxzss); $image = $image->textureimage($im); }else if($conf['syxzssf']==2){ $src2 = new Imagick('logo3.png');//图片水印 $src2->rotateImage(new ImagickPixel('none'), $syxzsssyxzss); $image = $image->textureimage($src2); } //$image->compositeimage($image,imagick::composite_copy,0,0); //header( "content-type: image/{$image->getimageformat()}" ); $nwff=md5(md5(md5($file).rand(100000,999999).$ttitme).rand(1000000,9999999)); $immmok= $image->writeimage('u/'.$nwff.'.jpg'); $image->clear(); $image->destroy(); //imagejpeg($im); if($immmok){ $stmt = $dbh->prepare("INSERT INTO p (uid, url,ctime,dtime,mtime,dday,zt,bz,sm) VALUES (:uid, :url,:ctime,:dtime,:mtime,:dday,:zt,:bz,:sm)"); $stmt->bindParam(':uid', $uligon); $stmt->bindParam(':url', $nwff); $stmt->bindParam(':sm', $_POST['sm']); $stmt->bindParam(':zt', $stmtusernewbbttt['bt']); $stmt->bindParam(':bz', $stmtusernewbbttt['bz']); /*$dtime=date('Y',$ttitme); $mtime=date('n',$ttitme); $ctime=$ttitme; $dday=date('j',$ttitme);*/ //$ttitme=$ttitme; $ctime=$ttitme; $dtime=date('Y',$ttitme); $mtime=date('n',$ttitme); $dday=date('j',$ttitme); $stmt->bindParam(':dtime', $dtime); $stmt->bindParam(':mtime', $mtime); $stmt->bindParam(':ctime', $ctime); $stmt->bindParam(':dday', $dday); $stmt->execute(); $title='会员管理'; $mmmdddhh='up'; include 'headu.php'; echo '<p style="margin-top: 29px;"><i class="fi-check" style="color:green;"></i>上传成功!3秒后跳转!</p><script>setTimeout("location.href = \'u.php?mm=by\';",2000);</script>'; include 'foot.php'; exit; } exit('上传失败!'); ?>
                Run code
                Cut to clipboard

                  字体
                  simsun.ttc

                  演示代码 效果php文字水印图片水印平铺实例
                  <?php /*error_reporting(E_ALL); ini_set('display_errors',1);*/ $file='a.jpg'; $image = new imagick($file); $syxzsssyxzss=-40;//rand(-360,360);//水印旋转 $im = new imagick(); $im->newimage( 200, 80, new imagickpixel( "none" ) ); //水印高度 宽度 背景色 $draw = new imagickdraw(); $draw->setfillcolor(new imagickpixel( 'red' ));//水印颜色 //$draw->setgravity(imagick::gravity_northwest); $draw->setFont('simsun.ttc');//水印字体 //$waterText=$conf['sy']; $draw->annotation(15,20 ,'意思完 意思玩 yisiwan.com');//水印文字 左 上距离 //$draw->setgravity(imagick::gravity_southeast); //$draw->annotation(5,15 ,'copyright');//多重水印 $im->drawimage( $draw); $im->rotateImage(new ImagickPixel('none'), $syxzsssyxzss); $image = $image->textureimage($im); //$image->compositeimage($image,imagick::composite_copy,0,0); //header( "content-type: image/{$image->getimageformat()}" ); //$nwff=md5(md5(md5($file).rand(100000,999999).$ttitme).rand(1000000,9999999)); $immmok= $image->writeimage('1.jpg'); $image->clear(); $image->destroy(); //imagejpeg($im);
                  Run code
                  Cut to clipboard