本节分享一个图片处理类,简单实现了文字水印与图片水印,是学习php图片操作的小例子。
代码:
<?php class ImageModifier { /** * 实现在图片上保存文本信息 * * default is array() * * @access private */ var $aTextData = array(); /** * 保存文本信息到图片上 * * default is array() * * @access private */ var $aImageData = array(); /** * imagick的资源标识符 * * default is FALSE * * @access private */ var $image = ""; /** * 错误消息级别 * * default is 0 * * @varinteger */ var $sError = 0; /** * 构造函数 * * @param string $tplImage template image * @access private */ public function __construct($tplImage) { // Check Imagick class exist or not if not show error. if (!class_exists("Imagick", false)) { exit("Unable to load class: Imagickn. Imagick Image Library Missing."); } // create a object of Imagick template image $this->image = new Imagick($tplImage); } /** * 设置文本属性 * * @param string $sText text to print on the image (i.e. Buy 1 Get 1 Free ) * @param integer $x text to print from x codinates * @param integer $y text to print from y codinates * @param integer $font text size for printing * @param string $color text color for print * @param integer $text_anglerotate text from 0-360 * @param string $font_style installed font name and path (i.e /usr/share/fonts/liberation/LiberationSans-Italic.ttf) * @Creating an array of text properties */ public function setText($sText, $x = 0, $y = 0, $font = 12, $color = 'black', $text_angle = 0, $font_style = './LiberationSans-Italic.ttf') { $this->aTextData[] = array("text"=>$sText, "font_color"=>$color, "font_size"=>$font,"x"=>$x,"y"=>$y, "font_style"=>$font_style, "text_angle"=>$text_angle); } /** * 设置图片属性 * * @param string $sImage text to print on the image (i.e. /home/httpd/images/brand.jpg ) * @param integer $x text to print from x codinates * @param integer $y text to print from y codinates * @param integer $text_anglerotate text from 0-180 * @Creating an array of image properties */ public function setImage($sImage, $x = 0, $y = 0, $angle=0) { $this->aImageData[] = array("image"=>$sImage, "x"=>$x, "y"=>$y, "angle"=>$angle); } /** * 从文字和图片属性生成最终图像 * * @param string $sImage Output image Name * @return boolean returns TRUE on success and FALSE upon failure */ public function generateImage($sImage) { foreach ($this->aImageData as $aImageValue) { if (!trim($aImageValue["image"])) { $sError = 1; break; } $oImg = new Imagick($aImageValue["image"]); $oImg->rotateImage("transparent", $aImageValue["angle"]); $this->image->compositeImage($oImg, $oImg->getImageCompose(), $aImageValue["x"], $aImageValue["y"]); unset($oImg); } foreach ($this->aTextData as $aTextValue){ if (!trim($aTextValue['text'])) { $sError = 2; break; } $oDraw = new ImagickDraw(); $oDraw->setFont($aTextValue['font_style']); $oDraw->setFontSize($aTextValue['font_size']); $oDraw->setFillColor($aTextValue['font_color']); $this->image->annotateImage($oDraw, $aTextValue['x'], $aTextValue['y'], $aTextValue['text_angle'], $aTextValue['text']); unset($oDraw); } if ($sError == 1) { exit("Unable to generate Image. Check "setImage" Properties"); }elseif ($sError == 2) { exit("Unable to generate Image. Check "setText" Properties"); } $this->image->setImageFormat("jpg"); return $this->image->writeImage($sImage); } } ?>
2,调用示例:
<?php //调用类文件 require_once "ImageModifier.class.php"; //示例 $oImageMagick = new ImageModifier('template.jpg'); // Image Template on which you have to manupulate $oImageMagick->setText("This is one", 350, 20, 22, "red"); $oImageMagick->setText("This is Two", 50, 50, 25, "blue","50"); $oImageMagick->setImage("brand.jpg", 160, 90, 0); $oImageMagick->setImage("tata.jpg", 160, 20); $newImagename = "mynewImage.jpg"; $oImageMagick->generateImage($newImagename); ?>