调试花时间
/*
想操作图片 先得到图片大小 类型信息
水印:就是把指定的水印复制到目标上 并加透明效果
imagecopymerge — 拷贝并合并图像的一部分 最后的参数是透明读
缩略图:就是把大图复制到小尺寸画面上
imagecopyresampled — 重采样拷贝部分图像并调整大小
*/
class ImageTool{
public static function imageInfo($image){
//imageInfo 分析图片信息
//return array()
if (!file_exists($image) ) { //判断图片是否存在
return false;
}
$info = getimagesize($image);
if ($info==false) {
return false;
}
//$info数组
$img['width'] = $info[0];
$img['height'] = $info[1];
$img['ext'] = substr($info['mime'],strpos($info['mime'], '/')+1);
return $img;
}
//加水印
//parm string $dst 待操作图片
//parm string $water 水印小图
//parm string $save 加水印的图保存的路径 不填则替换原始图
public static function water($dst,$water,$save=NULL,$pos=2,$alpha=50){
if (!file_exists($dst) || !file_exists($water)) {
return false;
}
//首先水印小于原图
$dinfo = self::imageInfo($dst); //读原始图信息
$winfo = self::imageInfo($water); //读水印信息
if ($winfo['height'] > $dinfo['height'] || $winfo['width'] > $dinfo['width']) {
return false;
}
//动态加载函数 读两张图的后缀
$dfunc = 'imagecreatefrom'.$dinfo['ext'];
$wfunc = 'imagecreatefrom'.$winfo['ext'];
if (!function_exists($dfunc) || !function_exists($wfunc)) {
return false;
}
//动态加载函数 创建画布
$dim = $dfunc($dst); //创建待操作画布
$wim = $wfunc($water); //创建水印
//根据水印位置 计算粘贴的坐标
switch ($pos) {
case 0: //左上角
$posx = 0;
$posy = 0;
break;
case 1: //右上角
$posx = $dinfo['width'] - $winfo['width'];
$posy = 0;
break;
case 3: //左下角
$posx = 0;
$posy = $dinfo['height'] - $winfo['height'];
break;
default: //右下角
$posx = $dinfo['width'] - $winfo['width'];;
$posy = $dinfo['height'] - $winfo['height'];
}
//加水印
imagecopymerge($dim, $wim, $posx, $posy, 0, 0, $winfo['width'],$winfo['height'], $alpha);
//保存水印路径
if (!$save) { //判断是否指定路径
$save = $dst;
unlink($dst); //删除原图
}
//创建水印图
$createfunc = 'image'. $dinfo['ext'];
$createfunc($dim,$save);
//销毁
imagedestroy($dim);
imagedestroy($wim);
return true;
}
//生成缩略图 thumb 缩略图:就是把大图复制到小尺寸画面上 imagecopyresampled
public static function thumb($dst,$save,$width=200,$height=200){
//判断待处理图片是否存在
$dinfo = self::imageInfo($dst);
if ($dinfo == false) {
return false;
}
//计算缩放比例 选小的
$calc = min($width/$dinfo['width'],$height/$dinfo['height']);
//创建原始画布
$dfunc = 'imagecreatefrom' . $dinfo['ext'];
$dim = $dfunc($dst);
//创建缩略画布
$tim = imagecreatetruecolor($width, $height);
//创建白色颜料 填充缩略图用
$white = imagecolorallocate($tim, 255, 255, 255);
//填充白色到缩略图
imagefill($tim, 0, 0, $white);
//复制并缩略
$dwidth = (int)$dinfo['width']*$calc;
$dheight = (int)$dinfo['height']*$calc;
$paddingx = (int)($width - $dwidth)/2;
$paddingy = (int)($height - $dheight)/2;
imagecopyresampled($tim, $dim, $paddingx, $paddingy, 0, 0,$dwidth, $dheight,
$dinfo['width'], $dinfo['height']);
//保存图片
if (!$save) {
$save = $dst;
unlink($dst);
}
$createfunc = 'image' . $dinfo['ext'];
$createfunc($tim,$save);
imagedestroy($dim);
imagedestroy($tim);
return true;
}
}