php合并图片背景png透明的代码:
/**
* 拼接图片
* $photo:边框内的图片绝对路径:win:E:\xamp\htdocs\news\images/pic.png
* linux:/usr/local/apache/htdocs/site/images/pic.png
* $kuang:边框路径:与$photo格式相同
*/
function spliceImage($photo,$kuang){
//将两幅图分别取到两个画布中
$image_kuang = imagecreatefrompng($kuang);
$image_photo = imagecreatefromjpeg($photo);
//创建一个新的,和大图一样大的画布
$image_3 = imageCreatetruecolor(imagesx($image_kuang),imagesy($image_kuang));
//为真彩色画布创建白色背景,再设置为透明
$color = imagecolorallocate($image_3, 255, 255, 255);
imagefill($image_3, 0, 0, $color);
imageColorTransparent($image_3, $color);
/**
* 制作水印的方法
* 先copy框再copy图片 这就添加水印的方法,先复制大图,再复制小图,小图覆盖大图
imagecopyresampled($image_3,$image_kuang,0,0,0,0,imagesx($image_kuang),imagesy($image_kuang),imagesx($image_kuang),imagesy($image_kuang));
imagecopymerge($image_3,$image_photo, 21,77,0,0,imagesx($image_photo),imagesy($image_photo), 100);
**/
/**
* 先copy图片,再copy画框,实现png的透明效果,将图片嵌入到画框里
* imagecopymerge与imagecopy的不同:
* imagecopymerge 函数可以支持两个图像叠加时,设置叠加层的透明度。imagecopymerge比imagecopy多一个参数,来设置透明度
* PHP内部源码里,imagecopymerge在透明度参数为100时,直接调用imagecopy函数。
* imagecopy 函数则不支持叠加透明,但拷贝时可以保留png图像的原透明信息,而imagecopymerge却不支持图片的本身的透明拷贝
* 即:使用imagecopymerge函数,可以实现打上透明度为30%的淡淡的水印图标,但图片本身的png就会变得像IE6不支持png透明那样,背景不透明了。
* 如果使用imagecopy函数,可以保留图片本身的透明信息,但无法实现30%的淡淡水印叠加,
*/
imagecopyresampled($image_3,$image_photo,12,12,0,0,imagesx($image_photo),imagesy($image_photo),imagesx($image_photo),imagesy($image_photo));
//imagecopymerge($image_3,$image_kuang, 0,0,0,0,imagesx($image_kuang),imagesy($image_kuang), 70);
imagecopy($image_3,$image_kuang, 0,0,0,0,imagesx($image_kuang),imagesy($image_kuang));
//获得要保存的文件名
$photoArray = explode('/',$photo);
$fileName = explode('.',end($photoArray));
$fileName = $fileName[0].'_n.png';
//将图片保存为png格式
//存储图片路径
$newImage = "images/".$fileName;
imagepng($image_3, $newImage);
//返回图片路径
$imageUrl = "images/".$fileName;
return $imageUrl;
}
$ttt = spliceImage('images/222.jpg','images/222.png');
echo $ttt;
echo '<img src="images/222_n.png"/>';
echo '<style>body{background:gray;}</style>';
