<p> 最近几天看了一下PHP的图片处理方面的功能,</p><p> 以前这方面的需求比较少,也就没怎么看,最近有空看了一下。感觉图片处理一些简单的功能还可以,复杂的就算了,GD库都2.0.1了,还是不支持中文,看了几篇文章,想使用中文只能先将GB2312转换成UNICODE再写入图片,太麻烦了,索性只使用英文算了。</p><p> 在图像生成部分可以定义图片的最大高,宽,比较适用于新闻及相册等系统。</p><p> GD2.0.1在图片处理上有很大提高,</p><p> 我试了下imageCopyResized和imageCopyResampled,</p><p> 后者处理的图片明显好于前者,据手册上讲后者对改变大小后的图片重新采样基本保持不失真,生成缩略图的效果还真不错。</p><p> -------------------------------------------------------------</p><p> 下面是类</p><p> -----------------------</p><code>//====================================================<br />// FileName:GDImage.inc.php<br />// Summary: 图片处理程序<br />// Author: ice_berg16(寻梦的稻草人)<br />// CreateTime: 2004-10-12<br />// LastModifed:2004-10-12<br />// copyright (c)2004 ice_berg16@163.com<br />//====================================================<br />class GDImage<br />{<br />var $sourcePath; //图片存储路径<br />var $galleryPath; //图片缩略图存储路径<br />var $toFile = false; //是否生成文件<br />var $fontName; //使用的TTF字体名称<br />var $maxWidth = 500; //图片最大宽度<br />var $maxHeight = 600; //图片最大高度<br />//==========================================<br />// 函数: GDImage($sourcePath ,$galleryPath, $fontPath)<br />// 功能: constructor<br />// 参数: $sourcePath 图片源路径(包括最后一个"/")<br />// 参数: $galleryPath 生成图片的路径<br />// 参数: $fontPath 字体路径<br />//==========================================<br />function GDImage($sourcePath, $galleryPath, $fontPath)<br />{<br />$this->sourcePath = $sourcePath;<br />$this->galleryPath = $galleryPath;<br />$this->fontName = $fontPath . "04B_08__.TTF";<br />}<br />//==========================================<br />// 函数: makeThumb($sourFile,$width=128,$height=128)<br />// 功能: 生成缩略图(输出到浏览器)<br />// 参数: $sourFile 图片源文件<br />// 参数: $width 生成缩略图的宽度<br />// 参数: $height 生成缩略图的高度<br />// 返回: 0 失败 成功时返回生成的图片路径<br />//==========================================<br />function makeThumb($sourFile,$width=128,$height=128)<br />{<br />$imageInfo = $this->getInfo($sourFile);<br />$sourFile = $this->sourcePath . $sourFile;<br />$newName = substr($imageInfo["name"], 0, strrpos($imageInfo["name"], ".")) . "_thumb.jpg";<br />switch ($imageInfo["type"])<br />{<br />case 1: //gif<br />$img = imagecreatefromgif($sourFile);<br />break;<br />case 2: //jpg<br />$img = imagecreatefromjpeg($sourFile);<br />break;<br />case 3: //png<br />$img = imagecreatefrompng($sourFile);<br />break;<br />default:<br />return 0;<br />break;<br />}<br />if (!$img)<br />return 0;<br />$width = ($width > $imageInfo["width"]) ? $imageInfo["width"] : $width;<br />$height = ($height > $imageInfo["height"]) ? $imageInfo["height"] : $height;<br />$srcW = $imageInfo["width"];<br />$srcH = $imageInfo["height"];<br />if ($srcW * $width > $srcH * $height)<br />$height = round($srcH * $width / $srcW);<br />else<br />$width = round($srcW * $height / $srcH);<br />//*<br />if (function_exists("imagecreatetruecolor")) //GD2.0.1<br />{<br />$new = imagecreatetruecolor($width, $height);<br />ImageCopyResampled($new, $img, 0, 0, 0, 0, $width, $height, $imageInfo["width"], $imageInfo["height"]);<br />}<br />else<br />{<br />$new = imagecreate($width, $height);<br />ImageCopyResized($new, $img, 0, 0, 0, 0, $width, $height, $imageInfo["width"], $imageInfo["height"]);<br />}<br />//*/<br />if ($this->toFile)<br />{<br />if (file_exists($this->galleryPath . $newName))<br />unlink($this->galleryPath . $newName);<br />ImageJPEG($new, $this->galleryPath . $newName);<br />return $this->galleryPath . $newName;<br />}<br />else<br />{<br />ImageJPEG($new);<br />}<br />ImageDestroy($new);<br />ImageDestroy($img);<br />}<br />//==========================================<br />// 函数: waterMark($sourFile, $text)<br />// 功能: 给图片加水印<br />// 参数: $sourFile 图片文件名<br />// 参数: $text 文本数组(包含二个字符串)<br />// 返回: 1 成功 成功时返回生成的图片路径<br />//==========================================<br />function waterMark($sourFile, $text)<br />{<br />$imageInfo = $this->getInfo($sourFile);<br />$sourFile = $this->sourcePath . $sourFile;<br />$newName = substr($imageInfo["name"], 0, strrpos($imageInfo["name"], ".")) . "_mark.jpg";<br />switch ($imageInfo["type"])<br />{<br />case 1: //gif<br />$img = imagecreatefromgif($sourFile);<br />break;<br />case 2: //jpg<br />$img = imagecreatefromjpeg($sourFile);<br />break;<br />case 3: //png<br />$img = imagecreatefrompng($sourFile);<br />break;<br />default:<br />return 0;<br />break;<br />}<br />if (!$img)<br />return 0;<br />$width = ($this->maxWidth > $imageInfo["width"]) ? $imageInfo["width"] : $this->maxWidth;<br />$height = ($this->maxHeight > $imageInfo["height"]) ? $imageInfo["height"] : $this->maxHeight;<br />$srcW = $imageInfo["width"];<br />$srcH = $imageInfo["height"];<br />if ($srcW * $width > $srcH * $height)<br />$height = round($srcH * $width / $srcW);<br />else<br />$width = round($srcW * $height / $srcH);<br />//*<br />if (function_exists("imagecreatetruecolor")) //GD2.0.1<br />{<br />$new = imagecreatetruecolor($width, $height);<br />ImageCopyResampled($new, $img, 0, 0, 0, 0, $width, $height, $imageInfo["width"], $imageInfo["height"]);<br />}<br />else<br />{<br />$new = imagecreate($width, $height);<br />ImageCopyResized($new, $img, 0, 0, 0, 0, $width, $height, $imageInfo["width"], $imageInfo["height"]);<br />}<br />$white = imageColorAllocate($new, 255, 255, 255);<br />$black = imageColorAllocate($new, 0, 0, 0);<br />$alpha = imageColorAllocateAlpha($new, 230, 230, 230, 40);<br />//$rectW = max(strlen($text[0]),strlen($text[1]))*7;<br />ImageFilledRectangle($new, 0, $height-26, $width, $height, $alpha);<br />ImageFilledRectangle($new, 13, $height-20, 15, $height-7, $black);<br />ImageTTFText($new, 4.9, 0, 20, $height-14, $black, $this->fontName, $text[0]);<br />ImageTTFText($new, 4.9, 0, 20, $height-6, $black, $this->fontName, $text[1]);<br />//*/<br />if ($this->toFile)<br />{<br />if (file_exists($this->galleryPath . $newName))<br />unlink($this->galleryPath . $newName);<br />ImageJPEG($new, $this->galleryPath . $newName);<br />return $this->galleryPath . $newName;<br />}<br />else<br />{<br />ImageJPEG($new);<br />}<br />ImageDestroy($new);<br />ImageDestroy($img);<br />}<br />//==========================================<br />// 函数: displayThumb($file)<br />// 功能: 显示指定图片的缩略图<br />// 参数: $file 文件名<br />// 返回: 0 图片不存在<br />//==========================================<br />function displayThumb($file)<br />{<br />$thumbName = substr($file, 0, strrpos($file, ".")) . "_thumb.jpg";<br />$file = $this->galleryPath . $thumbName;<br />if (!file_exists($file))<br />return 0;<br />$html = "<img src='$file' style='border:1px solid #000'/>";<br />echo $html;<br />}<br />//==========================================<br />// 函数: displayMark($file)<br />// 功能: 显示指定图片的水印图<br />// 参数: $file 文件名<br />// 返回: 0 图片不存在<br />//==========================================<br />function displayMark($file)<br />{<br />$markName = substr($file, 0, strrpos($file, ".")) . "_mark.jpg";<br />$file = $this->galleryPath . $markName;<br />if (!file_exists($file))<br />return 0;<br />$html = "<img src='$file' style='border:1px solid #000'/>";<br />echo $html;<br />}<br />//==========================================<br />// 函数: getInfo($file)<br />// 功能: 返回图像信息<br />// 参数: $file 文件路径<br />// 返回: 图片信息数组<br />//==========================================<br />function getInfo($file)<br />{<br />$file = $this->sourcePath . $file;<br />$data = getimagesize($file);<br />$imageInfo["width"] = $data[0];<br />$imageInfo["height"]= $data[1];<br />$imageInfo["type"] = $data[2];<br />$imageInfo["name"] = basename($file);<br />return $imageInfo;<br />}<br />}<br />?></code></p>
<p> </p>
<p> ----------------------------------</p><p> 下面是使用方法</p><p> 这个类使用了一个04B_08__.TTF字体</p><p> 使用类的时候指定该字体路径即可</p><p> -----------------------------------</p><code>require_once("GDImage.inc.php");<br />//header("Content-type: image/jpeg");//输出到浏览器的话别忘了打开这个<br />$img = new GDImage(IB_UPLOAD_PATH, IB_GALLERY, IB_TEMP);<br />$text = array("ice-berg.org","all rights reserved");<br />$img->maxWidth = $img->maxHeight = 300;<br />$img->toFile = true;<br />$img->waterMark("mm.jpg", $text);<br />$img->makeThumb("mm.jpg");<br />$img->displayThumb("mm.jpg");<br />$img->displayMark("mm.jpg");</code></p></p>