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

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

时间:2017-10-23 16:12来源:网络整理 作者:网络 点击:
分享到:
/ 内部使用的私有方法,用来确定水印图片的位置 / private function position($groundInfo, $waterInfo, $waterPos){ / 需要加水印的图片的长度或宽度比水印还小,无法生

/ 内部使用的私有方法,用来确定水印图片的位置 / private function position($groundInfo, $waterInfo, $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, $width, $height, $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, $waterImg, $pos, $waterInfo){ imagecopy($groundImg, $waterImg, $pos["posX"], $pos["posY"], 0, 0, $waterInfo["width"],$waterInfo["height"]); imagedestroy($waterImg); return $groundImg; }

/ 内部使用的私有方法,处理带有透明度的图片保持原样 / private function kidOfImage($srcImg, $size, $imgInfo){ $newImg = imagecreatetruecolor($size["width"], $size["height"]); $otsc = imagecolortransparent($srcImg); if( $otsc >= 0 &amp;&amp; $otsc < imagecolorstotal($srcImg)) { $transparentcolor = imagecolorsforindex( $srcImg, $otsc ); $newtransparentcolor = imagecolorallocate( $newImg, $transparentcolor['red'], $transparentcolor['green'], $transparentcolor['blue'] ); imagefill( $newImg, 0, 0, $newtransparentcolor ); imagecolortransparent( $newImg, $newtransparentcolor ); } imagecopyresized( $newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"], $imgInfo["width"], $imgInfo["height"] ); imagedestroy($srcImg); return $newImg; } } ```

精彩图集

赞助商链接