文档章节

PHP扩展MagickWand

Junn
 Junn
发布于 2013/09/06 18:19
字数 1514
阅读 1850
收藏 5
简介

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

MagickWand 有两种形式:

1、只是建立与ImageMagick的交互,这种情况必须先安装ImageMagick,优点是扩展程序文件小(一般几百K),可以快速升级ImageMagick版本,不过WINDOWS临时目录需要特殊权限。
2、扩展程序本身包含了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)


另附:

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
保存退出即可,无须重新启动任何服务。

© 著作权归作者所有

Junn
粉丝 143
博文 412
码字总数 288918
作品 0
海淀
技术主管
私信 提问
imagemagick, imagick和magickwand的安装

imagemagick是一个开源的强大的适用于图形图像开发制作的软件套件,与GD库同等级别的,甚至有些功能是GD所没有的,比如创建动态的gif图 片。它基于命令行操作的,但同时为大量的其它编程语言...

mickelfeng
2012/12/01
211
0
Image类的扩展,可编辑GIF动画图片,需要Magick支持.

/** * 定义 Myclass_Magick * * MagicWand_Info : * --------------------------- * ImageMagick 官网地址 [url]http://www.imagemagick.org/script/index.php[/url] * MagickWand For PHP ......

刘赤龙
2010/06/08
358
0
小试ImageMagik——开发篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/26754089 ===================================================== ImageMag......

雷霄骅
2014/05/24
0
0
GraphicsMagick Linux安装

GraphicsMagick 简单介绍: GraphicsMagick号称图像处理领域的瑞士军刀。 短小精悍的代码却提供了一个鲁棒、高效的工具和库集合,来处理图像的读取、写入和操作,支持超过88中图像格式,包括...

kearney
2012/10/11
2.5K
0
关于安装magickwand组件遇到的问题

为什么我装的magickwand没有后面support format 应该是: 这样就导致我使用MagickGetImageFormat()等函数报错

帖子列表
2014/09/01
179
1

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
13分钟前
2
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
29分钟前
4
0
IT兄弟连 HTML5教程 HTML5表单 HTML表单设计1

表单是PHP程序中最常使用的收集站点访问者信息的数据输入界面。通过表单浏览器获取用户的输入数据,并传送给Web服务器的脚本程序中,以各种不同的方式进行处理。在表单中提供了多种输入方式,...

老码农的一亩三分地
30分钟前
2
0
武者Vue

本文转载于:专业的前端网站➼武者Vue 1 - Introduction2 - The Vue Instance3 - Data & Methods4 - Data Binding5 - Events6 - Event Modifiers7 - Keyboard Events8 - Two-Way Data......

前端老手
36分钟前
4
0
uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部