php newmagickwand,PHP扩展MagickWand 是什么?如何加装?

​PHP扩展MagickWand

PHP 扩展 MagickWand ImageMagick

简介

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中打开此扩展。

代码示例

// 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 );

在图片上写文字:

// 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);

}

裁切:

// 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);

}

旋转图片:

// 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 );

调整大小:

// 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 );

锐化:

// 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

保存退出即可,无须重新启动任何服务。

相关标签:PHP扩展

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用C语言的ImageMagick库来创建图片缩放的程序。以下是使用ImageMagick库创建图片缩放的程序的基本步骤: 1. 安装ImageMagick库: 在Linux系统中,可以使用以下命令来安装ImageMagick库: ``` sudo apt-get install imagemagick ``` 2. 创建C语言程序: 创建一个新的C语言程序,命名为“image_resize.c”。 3. 包含ImageMagick库: 在“image_resize.c”程序中,需要包含ImageMagick的头文件: ``` #include <MagickWand/MagickWand.h> ``` 4. 创建MagickWand对象: 使用以下语句创建一个MagickWand对象: ``` MagickWand *magick_wand = NewMagickWand(); ``` 5. 读取图片文件: 使用以下语句读取图片文件: ``` MagickReadImage(magick_wand, "input.jpg"); ``` 6. 缩放图片: 使用以下语句缩放图片: ``` MagickResizeImage(magick_wand, 640, 480, LanczosFilter, 1); ``` 其中,640和480是缩放后的图片宽度和高度,LanczosFilter是缩放时使用的滤波器。 7. 保存图片文件: 使用以下语句保存缩放后的图片: ``` MagickWriteImage(magick_wand, "output.jpg"); ``` 8. 销毁MagickWand对象: 使用以下语句销毁MagickWand对象: ``` DestroyMagickWand(magick_wand); ``` 完整的“image_resize.c”程序示例: ``` #include <MagickWand/MagickWand.h> int main(int argc, char **argv) { // 创建MagickWand对象 MagickWand *magick_wand = NewMagickWand(); // 读取图片文件 MagickReadImage(magick_wand, "input.jpg"); // 缩放图片 MagickResizeImage(magick_wand, 640, 480, LanczosFilter, 1); // 保存图片文件 MagickWriteImage(magick_wand, "output.jpg"); // 销毁MagickWand对象 DestroyMagickWand(magick_wand); return 0; } ``` 以上是简单的示例,您可以根据自己的需求修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值