这里有新鲜出炉的PHP面向对象编程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于web开发领域。PHP的文件后缀名为php。
这篇文章主要为大家详细介绍了PHP图片水印类的封装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
- <?php
- header('Content-type:text/html;charset=utf8');
- $img = new Image();
- // $img->water('2a.jpg','logo.gif',0);
- class Image{
- //路径
- protected $path;
- //是否启用随机名字
- protected $isRandName;
- //要保存的图像类型
- protected $type;
- //通过构造方法队成员属性进行初始化
- function __construct($path='./',$isRandName=true,$type='png'){
- $this->path = $path;
- $this->isRandName = $isRandName;
- $this->type = $type;
- }
- //对外公开的水印方法
- /**
- * @param char $image 原图
- * @param char $water 水印图片
- * @param char $postion 位置
- * @param int $tmp 透明度
- * @param char $prefix 前缀
- */
- function water($image,$water,$postion,$tmp=100,$prefix='water_'){
- //判断这两个图片是否存在
- if(!file_exists($image)||!file_exists($water)){
- die('图片资源不存在');
- }
- //得到原图和水印图片的宽高
- $imageInfo = self::getImageInfo($image);
- $waterInfo = self::getImageInfo($water);
- //判断水印图片是否能贴上来
- if (!$this->checkImage($imageInfo,$waterInfo)){
- die('水印图片太大');
- }
- //打开图片
- $imageRes = self::openAnyImage($image);
- $waterRes = self::openAnyImage($water);
- //根据水印图片的位置计算水印图片的坐标
- $pos = $this->getPosition($postion,$imageInfo,$waterInfo);
- //将水印图片贴过来
- imagecopymerge($imageRes, $waterRes, $pos['x'], $pos['y'], 0, 0, $waterInfo["width"], $waterInfo["height"], $tmp);
- //得到要保存图片的文件名
- $newName = $this->createNewName($image,$prefix);
- //得到保存图片的路径,也就是文件的全路径
- $newPath = rtrim($this->path,'/').'/'.$newName;
- //保存图片
- $this->saveImage($imageRes,$newPath);
- //销毁资源
- imagedestroy($imageRes);
- imagedestroy($waterRes);
- //返回路径
- return $newPath;
- }
- //保存图像资源
- protected function saveImage($imageRes,$newPath){
- $func = 'image'.$this->type;
- //通过变量函数进行保存
- $func($imageRes,$newPath);
- }
- //得到文件名函数
- protected function createNewName($imagePath,$prefix){
- if ($this->isRandName){
- $name = $prefix.uniqid().'.'.$this->type;
- }else {
- $name = $prefix.pathinfo($imagePath)['filename'].'.'.$this->type;
- }
- return $name;
- }
- //根据位置计算水印图片的坐标
- protected function getPosition($postion,$imageInfo,$waterInfo){
- switch ($postion){
- case 1:
- $x = 0;
- $y = 0;
- break;
- case 2:
- $x = ($imageInfo['width']-$waterInfo["width"])/2;
- $y = 0;
- break;
- case 3:
- $x = $imageInfo["width"]- $waterInfo["width"];
- $y = 0;
- break;
- case 4:
- $x = 0;
- $y = ($imageInfo["height"]-$waterInfo["height"])/2;
- break;
- case 5:
- $x = ($imageInfo['width']-$waterInfo["width"])/2;
- $y = ($imageInfo["height"]-$waterInfo["height"])/2;
- break;
- case 6:
- $x = $imageInfo["width"]- $waterInfo["width"];
- $y = ($imageInfo["height"]-$waterInfo["height"])/2;
- break;
- case 7:
- $x = 0;
- $y = $imageInfo['height'] - $waterInfo["height"];
- break;
- case 8:
- $x = ($imageInfo['width']-$waterInfo["width"])/2;
- $y = $imageInfo['height'] - $waterInfo["height"];
- break;
- case 9:
- $x = $imageInfo["width"]- $waterInfo["width"];
- $y = $imageInfo['height'] - $waterInfo["height"];
- break;
- case 0:
- $x = mt_rand(0, $imageInfo["width"]- $waterInfo["width"]);
- $y = mt_rand(0, $imageInfo['height'] - $waterInfo["height"]);
- break;
- }
- return ['x'=>$x , 'y'=>$y];
- }
- protected function checkImage($imageInfo,$waterInfo){
- if (($waterInfo['width'] > $imageInfo['width'])||($waterInfo['height'] > $imageInfo['height'])){
- return false;
- }
- return true;
- }
- //静态方法。根据图片的路径得到图片的信息,宽度,高度、mime类型
- static function getImageInfo($imagePath){
- $info = getimagesize($imagePath);
- $data['width']=$info[0];
- $data['height']=$info[1];
- $data['mime'] = $info['mime'];
- return $data;
- }
- static function openAnyImage($imagePath){
- //得到图像的mime类型
- $mime = self::getImageInfo($imagePath)['mime'];
- //根据不同的mime类型打开不同的图像
- switch ($mime){
- case 'image/png':
- $image = imagecreatefrompng($imagePath);
- break;
- case 'image/gif':
- $image = imagecreatefromgif($imagePath);
- break;
- case 'image/jpeg':
- $image = imagecreatefromjpeg($imagePath);
- break;
- case 'image/wbmp':
- $image = imagecreatefromwbmp($imagePath);
- break;
- }
- return $image;
- }
- }
来源: http://www.phperz.com/article/17/1024/350753.html