- <?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;
- }
- }
Image类的扩展,可编辑GIF动画图片,需要Magick支持.
最新推荐文章于 2022-07-16 11:44:28 发布