脚本宝典收集整理的这篇文章主要介绍了一个经典实用的PHP图像处理类分享,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
本图像处理类可以完成对图片的缩放、加水印和裁剪的功能,支持多种图片类型的处理,缩放时进行优化等。
<PRe class="brush:PHp;">/**
/**
/**
/*水印<a href="https://www.js-code.COM/tag/tupian/" target="_blank" class="keywords">图片</a>和背景<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>必须都要存在*/
if(file_exists($curpath.$groundName) && file_exists($wpath.$waterName)){
$groundInfo = $this->getInfo($groundName); //<a href="https://www.js-code.com/tag/huoqu/" target="_blank" class="keywords">获取</a>背景信息
$waterInfo = $this->getInfo($waterName,$dir); //<a href="https://www.js-code.com/tag/huoqu/" target="_blank" class="keywords">获取</a>水印<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>信息
/*如果背景比水印<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>还小,就会被水印全部盖住*/
if(!$pos = $this->posITion($groundInfo,$waterInfo,$waterPos)){
echo '水印不应该比背景<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>小!';
return false;
}
$groundImg = $this->getImg($groundName,$groundInfo); //<a href="https://www.js-code.com/tag/huoqu/" target="_blank" class="keywords">获取</a>背景图像资源
$waterImg = $this->getImg($waterName,$dir); //<a href="https://www.js-code.com/tag/huoqu/" target="_blank" class="keywords">获取</a>水印<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>资源
/* <a href="https://www.js-code.com/tag/diaoyong/" target="_blank" class="keywords">调用</a>私有<a href="https://www.js-code.com/tag/fangfa/" target="_blank" class="keywords">方法</a>将水印图像按指定位置复制到背景<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>中 */
$groundImg = $this->copyImage($groundImg,$waterImg,$pos,$waterInfo);
/* 通过本类的私有<a href="https://www.js-code.com/tag/fangfa/" target="_blank" class="keywords">方法</a>,保存加水<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>并返回新<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>的<a href="https://www.js-code.com/tag/mingcheng/" target="_blank" class="keywords">名称</a>,<a href="https://www.js-code.com/tag/mo/" target="_blank" class="keywords">默</a>认以"wa_"为前缀 */
return $this->createNewImage($groundImg,$qz.$groundName,$groundInfo);
}else{
echo '<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>或水印<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>不存在!';
return false;
}
}
/**
$back = $this->getImg($name,$imgInfo); //<a href="https://www.js-code.com/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>资源
/* 创建<a href="https://www.js-code.com/tag/yige/" target="_blank" class="keywords">一个</a>可以保存裁剪后<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>的资源 */
$cutimg = imagecreatetruecolor($width,$height);
/* 使用imagecopyresampled()<a href="https://www.js-code.com/tag/hanshu/" target="_blank" class="keywords">函数</a>对<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>进行裁剪 */
imagecopyresampled($cutimg,$back,$height);
imagedestroy($back);
/* 通过本类的私有<a href="https://www.js-code.com/tag/fangfa/" target="_blank" class="keywords">方法</a>,保存剪切图并返回新<a href="https://www.js-code.com/tag/tupian/" target="_blank" class="keywords">图片</a>的<a href="https://www.js-code.com/tag/mingcheng/" target="_blank" class="keywords">名称</a>,<a href="https://www.js-code.com/tag/mo/" target="_blank" class="keywords">默</a>认以"cu_"为前缀 */
return $this->createNewImage($cutimg,$imgInfo);
}
/ 内部使用的私有方法,用来确定水印图片的位置 /
private function position($groundInfo,$waterPos){
/ 需要加水印的图片的长度或宽度比水印还小,无法生成水印 /
if( ($groundInfo["width"]<$waterInfo["width"]) || ($groundInfo["height"]<$waterInfo["height"]) ) {
return false;
}
switch($waterPos) {
case 1: //1为顶端居左
$pOSX = 0;
$posY = 0;
break;
case 2: //2为顶端居中
$posX = ($groundInfo["width"] - $waterInfo["width"]) / 2;
$posY = 0;
break;
case 3: //3为顶端居右
$posX = $groundInfo["width"] - $waterInfo["width"];
$posY = 0;
break;
case 4: //4为中部居左
$posX = 0;
$posY = ($groundInfo["height"] - $waterInfo["height"]) / 2;
break;
case 5: //5为中部居中
$posX = ($groundInfo["width"] - $waterInfo["width"]) / 2;
$posY = ($groundInfo["height"] - $waterInfo["height"]) / 2;
break;
case 6: //6为中部居右
$posX = $groundInfo["width"] - $waterInfo["width"];
$posY = ($groundInfo["height"] - $waterInfo["height"]) / 2;
break;
case 7: //7为底端居左
$posX = 0;
$posY = $groundInfo["height"] - $waterInfo["height"];
break;
case 8: //8为底端居中
$posX = ($groundInfo["width"] - $waterInfo["width"]) / 2;
$posY = $groundInfo["height"] - $waterInfo["height"];
break;
case 9: //9为底端居右
$posX = $groundInfo["width"] - $waterInfo["width"];
$posY = $groundInfo["height"] - $waterInfo["height"];
break;
case 0:
default: //随机
$posX = rand(0,($groundInfo["width"] - $waterInfo["width"]));
$posY = rand(0,($groundInfo["height"] - $waterInfo["height"]));
break;
}
return array("posX"=>$posX,"posY"=>$posY);
}
/ 内部使用的私有方法,用于获取图片的属性信息(宽度、高度和类型) /
private function getInfo($name,$path=".") {
$spath = $path=="." ? rtrim($this->path,"/")."/" : $path.'/';
$data = getimagesize($spath.$name);
$imgInfo["width"] = $data[0];
$imgInfo["height"] = $data[1];
$imgInfo["tyPE"] = $data[2];
return $imgInfo;
}
/内部使用的私有方法, 用于创建支持各种图片格式(jpg,gif,png三种)资源 /
private function getImg($name,$imgInfo,$path='.'){
$spath = $path=="." ? rtrim($this->path,"/")."/" : $path.'/';
$srcPic = $spath.$name;
switch ($imgInfo["type"]) {
case 1: //gif
$img = imagecreatefromgif($srcPic);
break;
case 2: //jpg
$img = imagecreateFromjpeg($srcPic);
break;
case 3: //png
$img = imagecreatefrompng($srcPic);
break;
default:
return false;
break;
}
return $img;
}
/ 内部使用的私有方法,返回等比例缩放的图片宽度和高度,如果原图比缩放后的还小保持不变 /
private function getNewSize($name,$imgInfo){
$size["width"] = $imgInfo["width"]; //原图片的宽度
$size["height"] = $imgInfo["height"]; //原图片的高度
if($width < $imgInfo["width"]){
$size["width"]=$width; //缩放的宽度如果比原图小才重新设置宽度
}
if($height < $imgInfo["height"]){
$size["height"] = $height; //缩放的高度如果比原图小才重新设置高度
}
/* 等比例缩放的算法 */
if($imgInfo["width"]*$size["width"] > $imgInfo["height"] * $size["height"]){
$size["height"] = round($imgInfo["height"]*$size["width"]/$imgInfo["width"]);
}else{
$size["width"] = round($imgInfo["width"]*$size["height"]/$imgInfo["height"]);
}
return $size;
}
/ 内部使用的私有方法,用于保存图像,并保留原有图片格式 /
private function createNewImage($newImg,$newName,$imgInfo){
$this->path = rtrim($this->path,"/")."/";
switch ($imgInfo["type"]) {
case 1: //gif
$result = imageGIF($newImg,$this->path.$newName);
break;
case 2: //jpg
$result = imageJPEG($newImg,$this->path.$newName);
break;
case 3: //png
$result = imagePng($newImg,$this->path.$newName);
break;
}
imagedestroy($newImg);
return $newName;
}
/ 内部使用的私有方法,用于加水印时复制图像 /
private function copyImage($groundImg,$waterInfo){
imagecopy($groundImg,$pos["posX"],$pos["posY"],$waterInfo["width"],$waterInfo["height"]);
imagedestroy($waterImg);
return $groundImg;
}
/ 内部使用的私有方法,处理带有透明度的图片保持原样 /
private function kidOfImage($srcImg,$imgInfo){
$newImg = imagecreatetruecolor($size["width"],$size["height"]);
$otsc = imagecolortransparent($srcImg);
if( $otsc >= 0 && $otsc < imagecolorstotal($srcImg)) {
$transparentcolor = imagecolorsforindex( $srcImg,$otsc );
$newtransparentcolor = imagecolorallocate(
$newImg,$transparentcolor['red'],$transparentcolor['green'],$transparentcolor['blue']
);
imagefill( $newImg,$newtransparentcolor );
imagecolortransparent( $newImg,$newtransparentcolor );
}
imagecopyresized( $newImg,$srcImg,$size["width"],$size["height"],$imgInfo["width"],$imgInfo["height"] );
imagedestroy($srcImg);
return $newImg;
}
}
以上是脚本宝典为你收集整理的一个经典实用的PHP图像处理类分享全部内容,希望文章能够帮你解决一个经典实用的PHP图像处理类分享所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。