PHP IMAGEMAGICK MAGICKWAND 使用
来源:互联网 发布:java gzip 压缩文件 编辑:程序博客网 时间:2024/06/05 18:20
在php中,虽然使用GD库可以进行比较强大的图形处理。但是使用 ImageMagick的PHP扩展MagickWand同样能够实现强大的处理功能。当然,使用MagickWand需要在php中增加一个extension。具体怎么添加大家google吧。
这边转载几个使用MagickWand的例子。
来源:http://www.ioncannon.net/php/61/php-imagemagick-magickwand-examples/
Example 1: Simple AnnotateOne note on the above is that I needed to specify the exact location of the font to get it to show up. I believe this isn't always needed but if you try to leave it out and nothing shows up you should try specifying the full path to the font.
Example 2: Complex AnnotateExample 3: Crop an AreaExample 4: RotateExample 5: ResizeExample 6: Apply Resharp FilterExample 7: Compress JPG下面是一个图片处理类。可以处理动态的多帧的gif图片。
这边转载几个使用MagickWand的例子。
来源:http://www.ioncannon.net/php/61/php-imagemagick-magickwand-examples/
Example 1: Simple Annotate
- <?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);
- MagickReadImage( $resource, 'small_flower.jpg' );
- if( MagickAnnotateImage( $resource, $dwand, 0, 0, 0, "Flower" ) )
- {
- header( 'Content-Type: image/gif' );
- MagickEchoImageBlob( $resource );
- }
- else
- {
- echo MagickGetExceptionString($resource);
- }
- ?>
Example 2: Complex Annotate
- <?php
- // convert flower.jpg -fill white -box "#00770080" -gravity South -pointsize 20 -annotate +0+5 " Flower " flower_annotate2.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 );
- ?>
- <?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
- /**
- * 定义 Myclass_Magick
- *
- * MagicWand_Info :
- * ---------------------------
- * ImageMagick 官网地址 [url]http:www.imagemagick.org/script/index.php[/url]
- * MagickWand For PHP Manual [url]http:www.magickwand.org/[/url]
- * MagickWand For PHP模块下载地址 [url]http:www.magickwand.org/download/php/[/url]
- */
- class Myclass_Magick
- {
- function Myclass_Magick() {
- if( !function_exists('newmagickwand') ) {
- die('no MagickImage extends! ');
- }
- }
- /**
- * 生成动态GIF
- *
- * @param array $fileName: 目标文件地址
- * @param int $delay: GIF帧过渡时间
- * @param string $desName: 生成后的图像文件名
- *
- */
- function createGif($fileName, $delay=1, $desName='') {
- $desName = $this->getDesName($desName);
- $mw = NewMagickWand();
- for($i=0; $i<count ($fileName);$i++){
- $mwTemp=NewMagickWand();
- MagickReadImage($mwTemp,$fileName[$i]);
- MagickSetImageDelay($mwTemp,$delay*100); //100="1秒"
- MagickAddImage($mw,$mwTemp);
- DestroyMagickWand($mwTemp);
- }
- MagickSetFormat($mw,"gif");
- MagickWriteImages($mw,$desName,MagickTrue);
- $mw=DestroyMagickWand($mw);
- return $desName;
- }
- /**
- * 缩放 动态GIF
- * @param string $fileName: 目标文件地址
- * @param int $width: 生成后的图像宽度
- * @param int $height: 生成后的图像高度
- * @param string $desName: 生成后的图像名称
- *
- */
- function resizeGif($fileName, $width, $height, $desName ) { $desName="$this-">getDesName($desName);
- $mw = NewMagickWand();
- MagickReadImage($mw,$fileName);
- MagickResetIterator($mw);
- //MagickNextImage($mw);
- do {
- $iw = MagickGetImageWidth($mw);
- $ih = MagickGetImageHeight($mw);
- $ratio = doubleval($iw) / doubleval($width);
- if ($height * $ratio < $ih) {
- $ratio = doubleval($ih) / doubleval($height);
- }
- $arrSize = array( floor($iw/$ratio), floor($ih/$ratio));
- MagickResizeImage($mw, $arrSize[0], $arrSize[1], 1, 1);
- } while(MagickNextImage($mw));
- MagickSetFormat($mw,"gif");
- MagickWriteImages($mw, $desName, true);
- DestroyMagickWand($mw);
- return $desName;
- }
- /**
- * 向 动画GIF上写字
- *
- * @param string $fileName: 目标文件地址
- * @param string $text: 要写的文字
- * @param string $desName: 生成后的图像地址
- * @param array $height: 文字的样式
- *
- */
- function writeGif($fileName, $text, $desName='', $config='') {
- $desName = $this->getDesName($desName);
- $textAlign = array( // 对齐方式
- 0 => MW_ForgetGravity,
- 1 => MW_NorthWestGravity,
- 2 => MW_NorthGravity,
- 3 => MW_NorthEastGravity,
- 4 => MW_WestGravity,
- 5 => MW_CenterGravity,
- 6 => MW_EastGravity,
- 7 => MW_SouthWestGravity,
- 8 => MW_SouthGravity,
- 9 => MW_SouthEastGravity,
- 10 => MW_StaticGravity,
- );
- $textColor = "#FF0000"; // 字体颜色
- $textWidth = 120; // 字体宽度
- $textSize = 14; // 字体大小
- $textFont = "simhei.ttf";
- $textAlpha = 1;
- $textAlignIndex = 1;
- $textString = iconv("gb2312", "utf-8", $text);//如果你传入的是非UTF8中文,这里要转换
- $textName = $this->desName;
- if($config) {
- extract($config, EXTR_OVERWRITE);
- }
- $dwFont = NewDrawingWand();
- $fontColor = NewPixelWand($textColor);
- DrawSetTextEncoding($dwFont, "UTF-8"); //设定图像上文字的编码
- DrawSetFont($dwFont, $textFont); //设定字体
- DrawSetFontWeight($dwFont, $textWidth); //设定字宽
- DrawSetFillColor($dwFont, $fontColor); //设定颜色
- DrawSetFontSize($dwFont, $textSize); //设定字体大小
- DrawSetGravity($dwFont, $textAlignIndex); //设定对齐方式
- DrawSetFillAlpha($dwFont, $textAlpha); //设置不透明度,1为完全不透明
- $dwGif = NewMagickWand();
- MagickReadImage($dwGif, $fileName);
- MagickResetIterator($dwGif);
- do {
- MagickAnnotateImage( $dwGif, $dwFont, 1, 1, 0, $textString );
- } while(MagickNextImage($dwGif));
- MagickSetFormat($dwGif,"gif");
- MagickWriteImages($dwGif, $desName, true);
- DestroyDrawingWand($dwFont);
- DestroyMagickWand($dwGif);
- return $desName;
- }
- /**
- * 向图像上写文字
- *
- * @param array $fileName: 目标文件地址
- * @param string $desName: 生成后的图像地址
- * @param array $fontInfo1:文字的样式信息
- * @param array $fontInfo2:文字的样式信息
- * @param int $delay: GIF帧过渡时间
- *
- */
- function writeText2($fileName, $desName='', $fontInfo1='', $fontInfo2='', $delay=1) {
- $desName = './temp/' . $this->getDesName($desName);
- $f1 = $this->writeText($fileName, $fontInfo1);
- $f2 = $this->writeText($fileName, $fontInfo2);
- // 再生成GIF
- $mwGif = NewMagickWand();
- $mw1 = NewMagickWand();
- $mw2 = NewMagickWand();
- MagickReadImage($mw1, $f1);
- MagickReadImage($mw2, $f2);
- MagickSetImageDelay($mw1,$delay*100);
- MagickAddImage($mwGif, $mw1);
- MagickSetImageDelay($mw2,$delay*100);
- MagickAddImage($mwGif, $mw2);
- DestroyMagickWand($mw1);
- DestroyMagickWand($mw2);
- MagickSetFormat($mwGif, "gif");
- MagickWriteImages($mwGif, $desName, MagickTrue);
- DestroyMagickWand($mwGif);
- unlink($f1);
- unlink($f2);
- return $desName;
- }
- /**
- * 向单帧图像写字,为writeText服务
- *
- * @param string $fileName: 目标文件地址
- * @param array $config: 配置信息
- *
- */
- function writeText($fileName, $config='') {
- $textAlign = array( // 对齐方式
- 0 => MW_ForgetGravity,
- 1 => MW_NorthWestGravity,
- 2 => MW_NorthGravity,
- 3 => MW_NorthEastGravity,
- 4 => MW_WestGravity,
- 5 => MW_CenterGravity,
- 6 => MW_EastGravity,
- 7 => MW_SouthWestGravity,
- 8 => MW_SouthGravity,
- 9 => MW_SouthEastGravity,
- 10 => MW_StaticGravity,
- );
- $textColor = "#FF0000"; // 字体颜色
- $textWidth = 120; // 字体宽度
- $textSize = 14; // 字体大小
- $textFont = "simhei.ttf";
- $textAlpha = 1;
- $textAlignIndex = 1;
- $textString = "测试"; //如果你传入的是非UTF8中文,这里要转换
- $textString = iconv("gb2312", "utf-8", $textString);//如果你传入的是非UTF8中文,这里要转换
- $textStrokeColor = "#00FF00";
- $textStrokeWidth = 0;
- $textStrokeOpacity = 0.2;
- $textX = 0;
- $textY = 0;
- if($config) {
- extract($config, EXTR_OVERWRITE);
- }
- $dwFont = NewDrawingWand();
- $fontColor = NewPixelWand($textColor);
- DrawSetTextEncoding($dwFont, "UTF-8"); //设定图像上文字的编码
- DrawSetFont($dwFont, $textFont); //设定字体
- DrawSetFontWeight($dwFont, $textWidth); //设定字宽
- DrawSetFillColor($dwFont, $fontColor); //设定颜色
- DrawSetFontSize($dwFont, $textSize); //设定字体大小
- DrawSetGravity($dwFont, $textAlignIndex); //设定对齐方式
- DrawSetFillAlpha($dwFont, $textAlpha); //设置不透明度,1为完全不透明
- $strokeColor = NewPixelWand($textStrokeColor);//设定外边框的颜色
- DrawSetStrokeColor($dwFont, $strokeColor); //设定外边框的颜色
- DrawSetStrokeWidth($dwFont, $textStrokeWidth); //设定外边框的宽度
- DrawSetStrokeOpacity($dwFont, $textStrokeOpacity); //设定外边框的不透明度
- $mw = NewMagickWand();
- MagickReadImage($mw, $fileName);
- MagickAnnotateImage($mw, $dwFont, $textX, $textY, 0, $textString );
- $tempName = './temp/' . time() . rand(0,1000) . ".jpg";
- MagickSetFormat($mw, "jpg");
- MagickWriteImage($mw, $tempName);
- DestroyDrawingWand($dwFont);
- DestroyMagickWand($mw);
- return $tempName;
- }
- function getDesName($desName) {
- if( emptyempty($desName) ) {
- $desName = md5(time().rand(0,100)).'.gif';
- }
- else {
- if( stripos(strtolower($desName), '.gif') === false ) {
- $desName .= ".gif";
- }
- }
- return $desName;
- }
- }
- ?>
- PHP IMAGEMAGICK MAGICKWAND 使用
- imagemagick的官方php图片插件magickwand在Windos上的安装
- imagemagick, imagick和magickwand编译安装
- PHP图像处类库 MagickWand
- 用ImageMagick/MagickWand在图片上添加文字
- php ImageMagick
- PHP imagemagick
- php使用imagemagick处理图片圆角
- windows下使用PHP+ImageMagick压缩图片
- 使用openresty+MagickWand建立图片服务器
- ImageMagick 使用
- ImageMagick使用
- ImageMagick使用
- php Imagemagick的安装
- php imagemagick 配置
- PHP 支持 ImageMagick
- php 安装ImageMagick centos
- ubuntu php imageMagick
- 设计模式总结—结构型模式
- WPF 如何制作图片按钮(imageButton)
- Dahua Lin推荐的几本数学书
- ios设备中,armv6/armv7架构的机器有哪些?
- istView.getCount()与ListView.getChildCount() OnScrollListener() 使用
- PHP IMAGEMAGICK MAGICKWAND 使用
- 连接MySql和SQLServer数据库
- 面向对象设计的五大原则(注:转载的)
- NotificationManager 和Notification的使用总结(转
- 微软企业库简单用法
- vim 多行缩进
- 自己写的动画函数,方便啊
- 同一个TextView不同文字的点击事件
- 贝塞尔曲线 --匀速贝塞尔曲线运动的实现