龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 一个经典实用的PHP图像处理类

时间:2017-10-23 16:12来源:网络整理 作者:网络 点击:
分享到:
一个经典实用的PHP图像处理类 本图像处理类可以完成对图片的缩放、加水印和裁剪的功能,支持多种图片类型的处理,缩放时进行优化等。[代码片段(267行)]

本图像处理类可以完成对图片的缩放、加水印和裁剪的功能,支持多种图片类型的处理,缩放时进行优化等。```php <?php / file: image.class.php 类名为Image 图像处理类,可以完成对各种类型的图像进行缩放、加图片水印和剪裁的操作。 http://www.lai18.com / class Image { / 图片保存的路径 */ private $path;

/* * 实例图像对象时传递图像的一个路径,默认值是当前目录 * @param string $path 可以指定处理图片的路径 / function __construct($path="./"){ $this->path = rtrim($path,"/")."/"; }

/ * 对指定的图像进行缩放 * @param string $name 是需要处理的图片名称 * @param int $width 缩放后的宽度 * @param int $height 缩放后的高度 * @param string $qz 是新图片的前缀 * @return mixed 是缩放后的图片名称,失败返回false;
/ function thumb($name, $width, $height,$qz="th_"){ /
获取图片宽度、高度、及类型信息 / $imgInfo = $this->getInfo($name); / 获取背景图片的资源 / $srcImg = $this->getImg($name, $imgInfo); / 获取新图片尺寸 / $size = $this->getNewSize($name,$width, $height,$imgInfo); / 获取新的图片资源 / $newImg = $this->kidOfImage($srcImg, $size,$imgInfo); / 通过本类的私有方法,保存缩略图并返回新缩略图的名称,以"th_"为前缀 */ return $this->createNewImage($newImg, $qz.$name,$imgInfo); }

/ * 为图片添加水印 * @param string $groundName 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式 * @param string $waterName 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式 * @param int $waterPos 水印位置,有10种状态,0为随机位置; * 1为顶端居左,2为顶端居中,3为顶端居右; * 4为中部居左,5为中部居中,6为中部居右; * 7为底端居左,8为底端居中,9为底端居右; * @param string $qz 加水印后的图片的文件名在原文件名前面加上这个前缀 * @return mixed 是生成水印后的图片名称,失败返回false
/ function waterMark($groundName, $waterName, $waterPos=0, $qz="wa_"){ /
获取水印图片是当前路径,还是指定了路径*/ $curpath = rtrim($this->path,"/")."/"; $dir = dirname($waterName); if($dir == "."){ $wpath = $curpath; }else{ $wpath = $dir."/"; $waterName = basename($waterName); }

/*水印图片和背景图片必须都要存在*/
if(file_exists($curpath.$groundName) &amp;&amp; file_exists($wpath.$waterName)){
  $groundInfo = $this->getInfo($groundName);        //获取背景信息
  $waterInfo = $this->getInfo($waterName, $dir);      //获取水印图片信息
  /*如果背景比水印图片还小,就会被水印全部盖住*/
  if(!$pos = $this->position($groundInfo, $waterInfo, $waterPos)){
    echo '水印不应该比背景图片小!';
    return false;
  }

  $groundImg = $this->getImg($groundName, $groundInfo);  //获取背景图像资源
  $waterImg = $this->getImg($waterName, $waterInfo, $dir); //获取水印图片资源

  /* 调用私有方法将水印图像按指定位置复制到背景图片中 */
  $groundImg = $this->copyImage($groundImg, $waterImg, $pos, $waterInfo);
  /* 通过本类的私有方法,保存加水图片并返回新图片的名称,默认以"wa_"为前缀 */
  return $this->createNewImage($groundImg, $qz.$groundName, $groundInfo);

}else{
  echo '图片或水印图片不存在!';
  return false;
}

}

/ * 在一个大的背景图片中剪裁出指定区域的图片 * @param string $name 需要剪切的背景图片 * @param int $x 剪切图片左边开始的位置 * @param int $y 剪切图片顶部开始的位置 * @param int $width 图片剪裁的宽度 * @param int $height 图片剪裁的高度 * @param string $qz 新图片的名称前缀 * @return mixed 裁剪后的图片名称,失败返回false;
/ function cut($name, $x, $y, $width, $height, $qz="cu_"){ $imgInfo=$this->getInfo($name); //获取图片信息 /
裁剪的位置不能超出背景图片范围 */ if( (($x+$width) > $imgInfo['width']) || (($y+$height) > $imgInfo['height'])){ echo "裁剪的位置超出了背景图片范围!"; return false; }

$back = $this->getImg($name, $imgInfo);     //获取图片资源
/* 创建一个可以保存裁剪后图片的资源 */
$cutimg = imagecreatetruecolor($width, $height);
/* 使用imagecopyresampled()函数对图片进行裁剪 */
imagecopyresampled($cutimg, $back, 0, 0, $x, $y, $width, $height, $width, $height);
imagedestroy($back);
/* 通过本类的私有方法,保存剪切图并返回新图片的名称,默认以"cu_"为前缀 */
return $this->createNewImage($cutimg, $qz.$name,$imgInfo);

}

精彩图集

赞助商链接