php class Image {private $path;//构造方法用来对图片所在位置进行初使化function __construct($path="./"){$this->path=rtrim($path, "/")."/";}/* 对图片进行缩放** 参数$name: 是需要处理的图片名称* 参数$width:是缩放后的宽度* 参数$height:是缩放后的高度* 参数$qz: 是新图片的名称前缀* 返回值:就是缩放后的图片名称,失败则返回false**/ function thumb($name, $width, $height, $qz="th_"){//获取图片信息$imgInfo=$this->getInfo($name); //图片的宽度,高度,类型//获取图片资源, 各种类型的图片都可以创建资源 jpg, gif, png$srcImg=$this->getImg($name, $imgInfo);//获取计算图片等比例之后的大小, $size["width"], $size["height"]$size=$this->getNewSize($name, $width, $height, $imgInfo);//获取新的图片资源, 处理一下gif透明背景$newImg=$this->kidOfImage($srcImg, $size, $imgInfo);//另存为一个新的图片,返回新的缩放后的图片名称return $this->createNewImage($newImg, $qz.$name, $imgInfo);}private function createNewImage($newImg, $newName, $imgInfo){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$return=imagepng($newImg, $this->path.$newName);break;}imagedestroy($newImg);return $newName;}private function kidOfImage($srcImg, $size, $imgInfo){$newImg=imagecreatetruecolor($size["width"], $size["height"]);$otsc=imagecolortransparent($srcImg);if($otsc >=0 && $otsc$tran=imagecolorsforindex($srcImg, $otsc);$newt=imagecolorallocate($newImg, $tran["red"], $tran["green"], $tran["blue"]);imagefill($newImg, 0, 0, $newt);imagecolortransparent($newImg, $newt);}imagecopyresized($newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"], $imgInfo["width"], $imgInfo["height"]);imagedestroy($srcImg);return $newImg;}private function getNewSize($name, $width, $height, $imgInfo){$size["width"]=$imgInfo["width"];$size["height"]=$imgInfo["height"];//缩放的宽度如果比原图小才重新设置宽度if($width$size["width"]=$width;}//缩放的高度如果比原图小才重新设置高度if($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 getInfo($name){$data=getImageSize($this->path.$name);$imageInfo["width"]=$data[0];$imageInfo["height"]=$data[1];$imageInfo["type"]=$data[2];return $imageInfo;}private function getImg($name, $imgInfo){$srcPic=$this->path.$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;}return $img;}/* 功能:为图片加水印图片* 参数$groundName: 背景图片,即需要加水印的图片* 参数$waterName: 水钱图片* 参数#aterPost:水印位置, 10种状态,* 0为随机位置** 1. 为顶端居左 2. 为顶端居中 3 为顶端居右* 4 为中部居左 5. 为中部居中 6 为中部居右* 7 . 为底端居左 8. 为底端居中, 9. 为底端居右** 参数$qz : 是加水印后的图片名称前缀* 返回值:就是处理后图片的名称**/ function waterMark($groundName, $waterName, $waterPos=0, $qz="wa_"){if(file_exists($this->path.$groundName) && file_exists($this->path.$waterName)){$groundInfo=$this->getInfo($groundName);$waterInfo=$this->getInfo($waterName);//水印的位置if(!$pos=$this->position($groundInfo, $waterInfo, $waterPos)){echo "水印不应该比背景图片小!";return;}$groundImg=$this->getImg($groundName, $groundInfo);$waterImg=$this->getImg($waterName, $waterInfo);$groundImg=$this->copyImage($groundImg, $waterImg, $pos, $waterInfo);return $this->createNewImage($groundImg, $qz.$groundName, $groundInfo);}else{echo "图片或水印图片不存在";return false;}}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 position($groundInfo, $waterInfo, $waterPos){//需要背景比水印图片大if(($groundInfo["width"]return false;}switch($waterPos){case 1:$posX=0;$posY=0;break;case 2:$posX=($groundInfo["width"]-$waterInfo["width"])/2;$posY=0;break;case 3:$posX=$groundInfo["width"]-$waterInfo["width"];$posY=0;break;case 4:$posX=0;$posY=($groundInfo["height"]-$waterInfo["height"]) /2;break;case 5:$posX=($groundInfo["width"]-$waterInfo["width"])/2;$posY=($groundInfo["height"]-$waterInfo["height"]) /2;break;case 6:$posX=$groundInfo["width"]-$waterInfo["width"];$posY=($groundInfo["height"]-$waterInfo["height"]) /2;break;case 7:$posX=0;$posY=$groundInfo["height"]-$waterInfo["height"];break;case 8:$posX=($groundInfo["width"]-$waterInfo["width"])/2;$posY=$groundInfo["height"]-$waterInfo["height"];break;case 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);}}php
path=rtrim($path, "/")."/";}/* 对图片进行缩放** 参数$name: 是需要处理的图片名称* 参数$width:是缩放后的宽度* 参数$height:是缩放后的高度* 参数$qz: 是新图片的名称前缀* 返回值:就是缩放后的图片名称,失败则返回false**/ function thumb($name, $width, $height, $qz="th_"){//获取图片信息$imgInfo=$this->getInfo($name); //图片的宽度,高度,类型//获取图片资源, 各种类型的图片都可以创建资源 jpg, gif, png$srcImg=$this->getImg($name, $imgInfo);//获取计算图片等比例之后的大小, $size["width"], $size["height"]$size=$this->getNewSize($name, $width, $height, $imgInfo);//获取新的图片资源, 处理一下gif透明背景$newImg=$this->kidOfImage($srcImg, $size, $imgInfo);//另存为一个新的图片,返回新的缩放后的图片名称return $this->createNewImage($newImg, $qz.$name, $imgInfo);}private function createNewImage($newImg, $newName, $imgInfo){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$return=imagepng($newImg, $this->path.$newName);break;}imagedestroy($newImg);return $newName;}private function kidOfImage($srcImg, $size, $imgInfo){$newImg=imagecreatetruecolor($size["width"], $size["height"]);$otsc=imagecolortransparent($srcImg);if($otsc >=0 && $otsc$tran=imagecolorsforindex($srcImg, $otsc);$newt=imagecolorallocate($newimg, $tran["red"], $tran["green"], $tran["blue"]);imagefill($newImg, 0, 0, $newt);imagecolortransparent($newImg, $newt);}imagecopyresized($newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"], $imgInfo["width"], $imgInfo["height"]);imagedestroy($srcImg);return $newImg;}private function getNewSize($name, $width, $height, $imgInfo){$size["width"]=$imgInfo["width"];$size["height"]=$imgInfo["height"];//缩放的宽度如果比原图小才重新设置宽度if($width$size["width"]=$width;}//缩放的高度如果比原图小才重新设置高度if($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;}立即学习“PHP免费学习笔记(深入)
”;
PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载private function getInfo($name){$data=getImageSize($this->path.$name);$imageInfo["width"]=$data[0];$imageInfo["height"]=$data[1];$imageInfo["type"]=$data[2];return $imageInfo;}private function getImg($name, $imgInfo){$srcPic=$this->path.$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;}return $img;}/* 功能:为图片加水印图片* 参数$groundName: 背景图片,即需要加水印的图片* 参数$waterName: 水钱图片* 参数#aterPost:水印位置, 10种状态,* 0为随机位置** 1. 为顶端居左 2. 为顶端居中 3 为顶端居右* 4 为中部居左 5. 为中部居中 6 为中部居右* 7 . 为底端居左 8. 为底端居中, 9. 为底端居右** 参数$qz : 是加水印后的图片名称前缀* 返回值:就是处理后图片的名称**/ function waterMark($groundName, $waterName, $waterPos=0, $qz="wa_"){if(file_exists($this->path.$groundName) && file_exists($this->path.$waterName)){$groundInfo=$this->getInfo($groundName);$waterInfo=$this->getInfo($waterName);//水印的位置if(!$pos=$this->position($groundInfo, $waterInfo, $waterPos)){echo "水印不应该比背景图片小!";return;}$groundImg=$this->getImg($groundName, $groundInfo);$waterImg=$this->getImg($waterName, $waterInfo);$groundImg=$this->copyImage($groundImg, $waterImg, $pos, $waterInfo);return $this->createNewImage($groundImg, $qz.$groundName, $groundInfo);}else{echo "图片或水印图片不存在";return false;}}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 position($groundInfo, $waterInfo, $waterPos){//需要背景比水印图片大if(($groundInfo["width"]return false;}switch($waterPos){case 1:$posX=0;$posY=0;break;case 2:$posX=($groundInfo["width"]-$waterInfo["width"])/2;$posY=0;break;case 3:$posX=$groundInfo["width"]-$waterInfo["width"];$posY=0;break;case 4:$posX=0;$posY=($groundInfo["height"]-$waterInfo["height"]) /2;break;case 5:$posX=($groundInfo["width"]-$waterInfo["width"])/2;$posY=($groundInfo["height"]-$waterInfo["height"]) /2;break;case 6:$posX=$groundInfo["width"]-$waterInfo["width"];$posY=($groundInfo["height"]-$waterInfo["height"]) /2;break;case 7:$posX=0;$posY=$groundInfo["height"]-$waterInfo["height"];break;case 8:$posX=($groundInfo["width"]-$waterInfo["width"])/2;$posY=$groundInfo["height"]-$waterInfo["height"];break;case 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);}}摘自 chaojie2009的专栏
