<?php
/**
* 图片水印缩放操作类
* Class Image
*/
class Image
{
protected $path;
protected $isRandName; #是否启用随机
protected $type; #图像类型
public function __construct($path = './',$isRandName=true,$type='png')
{
$this->path = $path;
$this->isRandName = $isRandName;
$this->type = $type;
}
/**
* @param $image @原图片
* @param $water @水印图片
* @param $postion @位置
* @param int $tmd @透明度
* @param string $preFix @图片前缀
*
*/
public function water($image,$water,$postion,$tmd=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'],$tmd);
$newName = $this->createNewName($image,$preFix);
$newPath = rtrim($this->path,'/').'/'.$newName;
$this->saveImage($imageRes,$newPath);
imagedestroy($imageRes);
imagedestroy($waterInfo);
return $newPath;
}
/**
* 缩放
*/
public function scaling()
{
}
/**
* @param $imagePath
* @return mixed
* 得到图片信息
*/
public static function getImageInfo($imagePath)
{
$info = getimagesize($imagePath);
$data['width'] = $info[0];
$data['height'] = $info[1];
$data['mime'] = $info['mime'];
return $data;
}
/**
* @param $imageInfo
* @param $waterInfo
* @return bool
* 判断水印图片是否大于原图片
*/
protected function checkImage($imageInfo,$waterInfo)
{
if ($waterInfo['width'] > $imageInfo['width'] || $waterInfo['height'] > $imageInfo['height']){
return false;
}
return true;
}
/**
* @param $iamgePath
* @return resource
* 根据图片类型打开图片
*/
public static function openAnyImage($iamgePath)
{
$mime = self::getImageInfo($iamgePath)['mime'];
switch ($mime){
case 'image/png':
$image = imagecreatefrompng($iamgePath);
break;
case 'image/gif':
$image = imagecreatefromgif($iamgePath);
break;
case 'image/jpeg':
$image = imagecreatefromjpeg($iamgePath);
break;
case 'image/wbmp':
$image = imagecreatefromwbmp($iamgePath);
break;
}
return $image;
}
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;
}
return ['x'=>$x,'y'=>$y];
}
protected function createNewName($imagePath,$prefix)
{
if ($this->isRandName){
$name = $prefix.uniqid().'.'.$this->type;
}else{
$name = $prefix($imagePath)['filename'].'.'.$this->type;
}
return $name;
}
protected function saveImage($imageRes,$newPath)
{
$func = 'image'.$this->type;
$func($imageRes,$newPath);
}
}
图片水印操作类
最新推荐文章于 2023-12-06 15:57:35 发布