图片上传平铺加水印

功能需求:将上传的图片整个页面平铺加上水印
在上传图片的时候,无法通过file_get_contents,和curl去获取水印图片的信息,因为这个不是放在同一个服务器里,获取的图片链接只能在浏览器打开,不能使用PHP函数获取图片信息(应该是做了处理),苦思良久,经人提点,将水印图片的内容保存在PHP的变量当中,即:在前端选中使用图片上传,获取到了图片的临时路径,将图片的信息通过base64_encode之后,获取到一个值,将这个值保存下来

这样在下面创建图像画布的时候就可以用到这里的变量了,就可以不用通过file_get_contents,和curl去获取水印图片信息

如下为代码内容:
        $base64_concent = base64_decode($img_concent);  //获取上面的变量
        $im = imagecreatefromstring(file_get_contents($_FILES['img']['tmp_name'])); //原图
        $watermark = imagecreatefromstring($base64_concent); //水印图
        //获取图、水印 宽高类型
        list($bgWidth, $bgHight, $bgType) = getimagesize($_FILES['img']['tmp_name']);
        //固定水印图高宽,依据水印图原来的信息
        $logoWidth = 325; //水印的宽,这里是根据变量的水印图设定的,原本也和list($bgWidth, $bgHight, $bgType) = getimagesize($_FILES['img']['tmp_name']);一样在这里获取,因为无法通过PHP函数获取图片的对象
        $logoHight = 296; //水印的高
        //定义平铺数据
        $x_length = $bgWidth; //x轴总长度
        $y_length = $bgHight; //y轴总长度
        //创建透明画布 伪白色
        $opacity=20; //水印透明度
        $w = imagesx($watermark);  
        $h = imagesy($watermark);
        $cut = imagecreatetruecolor($w,$h);
        $white = imagecolorallocatealpha($cut, 255,255,255,0);
        imagefill( $cut, 0, 0, $white );
        //整合水印
        imagecopy($cut, $watermark, 0, 0, 0, 0, $w, $h);
        //循环平铺水印
        for ($x = 0; $x < $x_length; $x++)
        {
            for ($y = 0; $y < $y_length; $y++) {
                    imagecopymerge($im, $cut, $x, $y, 0, 0, $logoWidth, $logoHight, $opacity);
                    $y += $logoHight-1;  //这里-1是因为在打印出来加了水印图有边框出现
            }
            $x += $logoWidth-1; //这里-1是因为在打印出来加了水印图有边框出现
        }
        $imgtype = 'jpg';
        if($_FILES['img']['type'] == 'image/jpg' || $_FILES['img']['type'] == 'image/jpeg'){
            imagejpeg($im,$_FILES['img']['tmp_name']);
        }else{
            $imgtype = 'png';
            imagepng($im,$_FILES['img']['tmp_name']);
        }

 

你可能感兴趣的:(PHP)