PHP扩展MagickWand

简介

MagickWand 是PHP的一个扩展程序,经过它创建起与ImageMagick的交互,进行图片的处理。它是默认的GD图象函数库的绝佳替代方案。从安全性和易用性来讲,在PHP中使用MagickWand比使用命令行ImageMagick要安全快捷的多。另外 imagick也可用于PHP中做为ImageMagick的替代方案。

MagickWand 有两种形式:

一、只是创建与ImageMagick的交互,这种状况必须先安装ImageMagick,优势是扩展程序文件小(通常几百K),能够快速升级ImageMagick版本,不过WINDOWS临时目录须要特殊权限。
二、扩展程序自己包含了ImageMagick,优势是不须要额外安装ImageMagick,临时目录不须要特殊权限,但扩展程序文件比较大(通常4M以上)。

MagickWand 默认并无在PHP的安装包里,须要去PHP网站上下载,并在PHP.INI中打开此扩展。

代码示例
<?php
    // convert flower.jpg -quality 80% flower_quality.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickSetFormat($resource, 'JPG');
    MagickSetImageCompression($resource, MW_JPEGCompression);
    MagickSetImageCompressionQuality($resource, 80.0);
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>
在图片上写文字:
<?php
    // convert flower.jpg -font courier -fill white -pointsize 20 -annotate +50+50 Flower flower_annotate1.jpg
     
    $resource = NewMagickWand();
    $dwand = NewDrawingWand();
    $pwand = NewPixelWand();
     
    PixelSetColor($pwand, "white");
    DrawSetFont($dwand, "/usr/share/fonts/default/TrueType/cour.ttf");//指定字体
    DrawSetFontSize($dwand, 20);
    DrawSetFillColor($dwand, $pwand);
     
    DrawSetGravity($dwand, MW_SouthGravity);
     
    MagickReadImage( $resource, 'small_flower.jpg' );
     
    if( MagickAnnotateImage( $resource, $dwand, 0, 0, 0, "Flower" ) ){
        header( 'Content-Type: image/gif' );
        MagickEchoImageBlob( $resource );
    }else{
        echo MagickGetExceptionString($resource);
    }
 
?>
裁切:
<?php
    // convert flower.jpg -crop 128×128+50+50 flower_crop.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    if( MagickCropImage( $resource, 128, 128, 50, 50 ) ){
    header( 'Content-Type: image/gif' );
        MagickEchoImageBlob( $resource );
    }else{
        echo MagickGetExceptionString($resource);
    }
?>
旋转图片:
<?php
    // convert flower.jpg -rotate 45 flower_rotate45.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickRotateImage( $resource, null, 45 );
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>
调整大小:
<?php
    // convert flower_original.jpg -resize 640×480 flower.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickResizeImage( $resource, 100, 100, MW_QuadraticFilter, 1.0 );
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>
锐化:
<?php
    // convert flower.jpg -unsharp 1.5×1.0+1.5+0.02 flower_unsharp.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickUnsharpMaskImage( $resource, 1.5, 1.0, 1.5, 0.02 );
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>

相关连接

MagickWand For PHP (Windows+Patch)
MagickWand For PHP Manual
MagickWand for PHP/Windows (php_magickwand_q16_st.dll) php


另附: html

ImageMagick和magickwand是什么?如何加装?

ImageMagick是一个用于图象处理的程序 能够运行在windows下和linux下 他的功能很是强大 能进行大小、格式、水印、标签等各类图象处理 好比在Linux下执行convert --help 便可查看ImageMagick的一部分功能说明 在PHP程序中,也能够调用这个ImageMagick程序 可是,调用的形式是经过php的module来实现的 这个module的名称叫作magickwand 不少程序员改用magickwand而再也不使用php内置的gd图象函数库 ImageMagick功能很是强大,而且在Linux的发行版的光盘中都包含了安装的rpm 可是系统上自带的ImageMagick的版本一般很老,没法和magickwand共存 因此只能自行安装一个新的 而编译magicwand也是比较复杂的 下边会详细讲述 环境准备 ------------------------ 编译php的magickwand模块环境上必须自己已经装有php (由于一会要用php里边的phpize程序) 下载最新版的ImageMagick(版本大于6.2) 这是由于Redhat自带的版本是5.x,不能搭配magickwand使用 因此只能本身编译一个6.2.x版原本用了 而且,不光是开发环境须要这个包,在实际运行的服务器上 也要手工编译一个ImageMagick-6.2.x版本才能够。 从ImageMagick的官方站下载源码包(用google的搜索第一项就是官方站) 解压缩后配置安装 ./configure LDFLAGS="-L/usr/lib" CPPFLAGS="-I/usr/include" --prefix=/usr/local/ImageMagick --enable-shared --enable-lzw make make install 则6.2版本的ImageMagick安装完成 下载 ------------------------ 从magickwand的官方站下载源码包(用google的搜索第一项就是官方站) 从php.net下载php源码 将php源码解压缩,把magickwand也解压缩,放到php源码下的ext/目录下 例如/root/php-4.4.2/ext/magickwand 整合Module ------------------------ 为何要整合module?这是由于php内置的图象处理函数库是gd,而不是magickwand 在php的配置脚本中根本看不到 好比到php的源码根目录下,例如: cd /root/php-4.4.2 执行./configure --help | grep magickwand 能够发现根本搜索不到magickwand的有关信息 因此直接编译是不能得到magickwand模块支持的 因此,须要手工把magickwand的源代码添加到php的source tree 而且从新生成configure脚本,而后再编译 进入目录cd /root/php-4.4.2/ext/magickwand 执行phpize phpize这个命令是包含在php包自己里边的,若是这台机器没装过php,这无法执行这个命令 (这就是为何要把程序放在已经安装了php的服务器上编译的缘由) 而后退回到php的源码根路径 cd /root/php-4.4.2 删除老的configure文件 rm ./configure 生成新的configure文件 ./buildconf --force 这个时候在php源码目录下,一个新的configure脚本诞生了 用这个脚本去配置编译php,才能开启magickwand模块 执行./configure --help | grep magickwand能够看到: --with-magickwand=DIR Include Magickwand support 这说明如今进行php的配置编译,就能够启用这个模块了 配置编译 ------------------------ 如今配置php,使用参数: ./configure --enable-shared --with-magickwand=shared,/usr/local/ImageMagick --enable-module=shared,magickwand 这里使用enable-module方式是为了获取so模块文件,便于给其余服务器加装 而后编译 make 等待几分钟便可完成了 获取模块 ------------------------ 而后就能够去php的源码目录中找刚才编译出来的so文件了 find /root/php-4.4.2 -name 'magickwand.so' 把这个文件copy出来,便可放置到别的服务器上使用了 cp ./module/magickwand.so /root 生产环境上安装 ------------------------ 在实际运行的服务器上,要先按照前边所述的方法 编译一个6.2.x版本的ImageMagick并安装到服务器上 而后把magickwand.so复制到php的模块目录里边 好比对应as4版本的php:/usr/local/php4/lib/php 而后在php.ini加入extenstion=magickwand.so 好比对应as4的版本的php.ini在/usr/local/php4/etc/php.ini 保存退出便可,无须从新启动任何服务。
相关文章
相关标签/搜索