原文链接https://www.cnblogs.com/fengms/p/5422070.html
/**
* 图片合并
* */
ob_clean();
header('Content-type:image/png');
//如果遇到问题需要找bug,把header放最后
/*
$str = "1\n2\n3\n";
$im = imagecreate(100,120);
$white = imagecolorallocate($im,0xFF,0xFF,0xFF);
imagecolortransparent($im,$white); //imagecolortransparent() 设置具体某种颜色为透明色,若注释
$black = imagecolorallocate($im,0x00,0x00,0x00);
imagettftext($im,15,0,50,40,$black,"simkai.ttf",$str); //字体设置部分linux和windows的路径可能不同
header("Content-type:image/png");
imagepng($im);//文字生成的图片
*/
//判断是哪种图片
function isjpg($pic_path) {
$pathInfo = pathinfo($pic_path);
switch (strtolower($pathInfo['extension'])) {
case 'jpg':
case 'jpeg':
$imagecreatefromjpeg = 'imagecreatefromjpeg';
break;
case 'png':
$imagecreatefromjpeg = 'imagecreatefrompng';
break;
case 'gif':
default:
$imagecreatefromjpeg = 'imagecreatefromstring';
break;
}
return $imagecreatefromjpeg;
}
/**
* 图片2合一
* @param type $path_1 人物图片
* @param type $path_2 装备图片
* @param type $width 图片二距离x轴位置
* @param type $height 图骗而距离y轴位置
*/
function img21($path_1, $path_2,$width=200,$height=200) {
$p1 = isjpg($path_1);
$p2 = isjpg($path_2);
//将人物和装备图片分别取到两个画布中
$image_1 = $p1($path_1);
$image_2 = $p2($path_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));
//再将装备图片copy到已经具有人物图像的真彩色画布中,同样也不会失真
imagecopymerge($image_3, $image_2, $width, $height, 0, 0, imagesx($image_2), imagesy($image_2), 100);
//将画布保存到指定的gif文件
imagegif($image_3);
}
$path_1 = "./20180830/15356120713227.jpg";
$path_2 = "./20180830/15356133061333.jpg";
img21($path_1,$path_2,1,1); // 图2插入到图1 中