功能需求:将上传的图片整个页面平铺加上水印
在上传图片的时候,无法通过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']);
}