做电商项目的时候,后台处理需要给上传的图片加文字或者图片水印,以下是加图片水印封装的类,具体的注释代码写的很清楚,仅供参考学习。
<?php
class Image{
public $config = array(
'srcimg'=>'',//缩放原图片
'zoomdir'=>'',//缩放后图片的存储路径
'newfilename'=>array(),//缩放图片文件名
'logo'=>''//LOGO地址
);
/**
* 传参,可重新初始化
* @param array $arr
*/
public function __construct($arr=array()){//传入数组,构造函数初始化
if(is_array($arr)){
foreach ($arr as $key=>$value) {//遍历数组 ,
if(array_key_exists($key,$this->config)){//找到对应的键
$this->config[$key] = $value;//将其键对应的值进行替换
}
}
}
}
/**
* @param float $percent 缩放百分比
* @param null $prefix 文件前缀
*/
public function zoom($percent=0.5,$prefix=null){
$arr = getimagesize($this->config['srcimg']);//获取图片资源
$src_w = $arr[0];//宽
$src_h = $arr[1];//高
$dst_w = $src_w*$percent;//目标宽
$dst_h = $src_h*$percent;//目标高
$dst_image = imagecreatetruecolor($dst_w,$dst_h);//目标资源
$src_image = $this->getImageResource($this->config['srcimg']);//原资源
imagecopyresampled($dst_image,$src_image,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
if(!is_dir($this->config['zoomdir'])){//判断是否有这个目录存在 如果没有执行下列函数
mkdir($this->config['zoomdir'],0777);//0777最高文件权限,mkdir.
}
$newfilename = uniqid($prefix).".png";//传可选参数,$prefix作为随机数前缀 创建随机文件名
$this->config['newfilename'][] = $newfilename;//
imagepng($dst_image,$this->config['zoomdir'].$newfilename);
return $this->config['zoomdir'].$newfilename;
}
/**
* 根据图片格式,返回资源
* @param $file
* @return resource
*/
public function getImageResource($file){
$arr = getimagesize($file);
switch($arr[2]){
case 1:
return imagecreatefromgif($file);
break;
case 2:
return imagecreatefromjpeg($file);
break;
case 3:
return imagecreatefrompng($file);
break;
default:
exit('图片格式只能为gif jpeg png格式');
break;
}
}
public function waterMark($img,$alpha=50){
//原资源
$src_im = imagecreatefrompng($this->config['logo']);
$arr = getimagesize($this->config['logo']);
$dst_im = $this->getImageResource($img);
imagecopymerge($dst_im, $src_im,0, 0, 0, 0,$arr[0], $arr[1],$alpha);//将两张图片合在一起
imagepng($dst_im,$img);
}
public function __call($name,$param){
exit('no this method');
}
}