将背景图与动态二维码、微信头像合成新图片

  • 爵特猛
  • 2018-9-4 15:29
  • PHP
  • 625
/**
 * 合成图片
 * 将活动背景图片设置透明,然后和动态二维码图片合成一张图片
 * @param    string                   $qr_path   微信临时二维码图片地址
 * @param    string                   $head_path 微信头像地址
 * @param    string                   $bg_path   背景图路径
 * @return   [type]                              [description]
 */
function merge_img($qr_path,$head_path,$bg_path='http://img.laichuhan.com/Public/images/wechat/wx_bg.jpg')
{
    //创建图片对象
    $image_1 = imagecreatefromjpeg($bg_path);
    $image_2 = imagecreatefromjpeg($qr_path);
    $image_3 = imagecreatefromjpeg($head_path);

    //创建真彩画布
    //imagecreatetruecolor(int $width, int $height)--新建一个真彩色图像
    $image_new = imageCreatetruecolor(imagesx($image_1),imagesy($image_1));

    //为真彩画布创建白色背景
    //imagecolorallocate(resource $image, int $red, int $green, int $blue)
    // $color = imagecolorallocate($image_new, 255, 255, 255);

    //imagefill(resource $image ,int $x ,int $y ,int $color)
    //在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)
    // imagefill($image_new, 0, 0, $color);

    //设置透明
    //imagecolortransparent(resource $image [,int $color])
    //将image图像中的透明色设定为 color
    // imageColorTransparent($image_new, $color);

    //复制图片一到真彩画布中(重新取样-获取透明图片)
    //imagecopyresampled(resource $dst_image ,resource $src_image ,int $dst_x ,int $dst_y ,int $src_x , int $src_y ,int $dst_w ,int $dst_h ,int $src_w ,int $src_h)
    // dst_image:目标图象连接资源
    // src_image:源图象连接资源
    // dst_x:目标 X 坐标点
    // dst_y:目标 Y 坐标点
    // src_x:源的 X 坐标点
    // src_y:源的 Y 坐标点
    // dst_w:目标宽度
    // dst_h:目标高度
    // src_w:源图象的宽度
    // src_h:源图象的高度
    imagecopyresampled($image_new, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), imagesx($image_1), imagesy($image_1));

    //与图片二合成
    //imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分
    // //将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
    $qr_position_x = (imagesx($image_1)/2)-(imagesx($image_2)/2);//二维码的横坐标
    $qr_position_y = (imagesy($image_1)/2)-(imagesy($image_2)/2)-115;//二维码的纵坐标
    imagecopymerge($image_new, $image_2, $qr_position_x, $qr_position_y, 0, 0, imagesx($image_2), imagesy($image_2), 100);

    $h_position_x = (imagesx($image_1)/2)-(imagesx($image_3)/2);//头像的横坐标
    $h_position_y = (imagesy($image_1)/2)-(imagesy($image_3)/2)-115;//头像的纵坐标
    imagecopymerge($image_new, $image_3, $h_position_x, $h_position_y, 0, 0, imagesx($image_3), imagesy($image_3), 100);

    $dir = '/Upload/wechat/' .date('Y-m-d').'/';
    $is_dir = $_SERVER['DOCUMENT_ROOT'] .$dir;
    is_dir($is_dir) OR mkdir($is_dir, 0777, true);// 如果不存在则递归创建目录
    $filename = time().rand(0,9999).'.png';

    // 输出合成图片
    imagepng($image_new,'.'.$dir.$filename);
    return $dir.$filename;
}


本文为爵特猛原创文章,转载无需和我联系,但请注明来自爵特猛博客www.juetemeng.com