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>';