1.GD库要开启 代码:
/**
* 合并图片,融合合并
* @param $file_1 原图片路径1
* @param $file_2 原图片路径2
* @param $re_file 合成图片保存路径
* @param $position 水印位置 1:左上;2:左下,3:右上;4:右下;5:中间或者自己设置(['x'=1,'y'=0])
*/
public function merageImg($file_1, $file_2, $re_file='',$position=5)
{
if (!$re_file){
if (!is_dir($this->path)) {
mkdir($this->path, 0777, true);
}
$re_file = $this->path.'/d'.time().'.png';
}
//将两张图片分别取到两个画布中
$image_1 = $this->canvas($file_1);
$image_2 = $this->canvas($file_2);
//创建一个和大图一样大小的真彩色画布(ps:只有这样才能保证后面copy装备图片的时候不会失真)
$image_3 = imageCreatetruecolor(imagesx($image_1), imagesy($image_1));
//为真彩色画布创建白色背景,再设置为透明
$color = imagecolorallocate($image_3, 255, 255, 255);
imagefill($image_3, 0, 0, $color);
imageColorTransparent($image_3, $color);
//首先将大图画布采样copy到真彩色画布中,不会失真
imagecopyresampled($image_3, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), imagesx($image_1), imagesy($image_1));
//水印起始位置
$x = 0;
$y = 0;
if (is_array($position)){
$x = $position['x'];
$y = $position['y'];
}else{
switch ($position){
case 1:
break;
case 2:
$y = imagesy($image_1)-imagesy($image_2);
break;
case 3:
$x = imagesx($image_1)-imagesx($image_2);
break;
case 4:
$x = imagesx($image_1)-imagesx($image_2);
$y = imagesy($image_1)-imagesy($image_2);
break;
case 5:
$x = (imagesx($image_1)-imagesx($image_2))/2;
$y = (imagesy($image_1)-imagesy($image_2))/2;
break;
}
}
//再将小图图片copy到已经具有人物图像的真彩色画布中,同样也不会失真
imagecopymerge($image_3, $image_2, $x, $y, 0, 0, imagesx($image_2), imagesy($image_2), 100);
//将画布保存到指定的gif文件
imagejpeg($image_3, $re_file);
return $re_file;
}
/**
* 将图片取到两个画布中
* @param $file 图片路径
*/
protected function canvas($file){
if(!file_exists($file))
{
return '文件路径错误';
}
$img = '';
$typeArr=explode(".",$file);
switch($typeArr['2'])
{
case "png":
$img=imagecreatefrompng($file);
break;
case "jpg":
$img=imagecreatefromjpeg($file);
break;
case "jpeg":
$img=imagecreatefromjpeg($file);
break;
case "gif":
$img=imagecreatefromgif($file);
break;
case "wbmp":
$img=imagecreatefromwbmp($file);
break;
case "webp":
$img=imagecreatefromwebp($file);
break;
case "xbm":
$img=imagecreatefromxbm($file);
break;
case "xpm":
$img=imagecreatefromxpm($file);
break;
case "gd":
$img=imagecreatefromgd($file);
break;
case "gd2":
$img=imagecreatefromgd2($file);
break;
case "gd2part":
$img=imagecreatefromgd2part($file);
break;
}
return $img;
}
放到项目中就可以直接用了