PHP 合并图片,长按图片保存图片到本地

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gu_wen_jie/article/details/83417943

一个小分享,平时 image 相关函数用的比较少,这次刚好用上了,就分享一波。其实这个需求前端做起来会更加的方便,采用:html2canvas 可以实现,不过这一篇主要介绍 PHP 的实现。

场景

场景是这样的,一个小活动,我们提供的一张图片 a.jpg ,然后需要用户上传一张图片 b.jpg ,最终达到用户长按此图可以进行保存。没用进行合并之前,我们采取的的是将 b.jpg 渲染进 a.jpg ,但是这样有一个问题,就是在长按保存的时候只能保存到 a.jpg ,因为也许你的 a.jpg 很大,b.jpg 比较小,且不是一张完整图片,所以最后采用 image 相关函数实现了先合并,后渲染,最后长按保存成功。来个图说明一下:
在这里插入图片描述

看这张图就很容易知道我想要表达的东西了。下面我们上代码来实现功能

实现

/**
 * 合并背景图和用户上传图片并添加时间戳水印
 * @param $img_1 a图
 * @param $img_2 b图
 * @param $dst_x b图向右移动尺寸
 * @param $dst_y b图向右移动下寸
 * @param $dst_w b图宽度(按比例缩放以后)
 * @param $dst_h b图高度(按比例缩放以后)
 * @return string 返回合成后图片名称
 */
function composeImg($img_1,$img_2,$dst_x,$dst_y,$dst_w,$dst_h)
{
	$img_1 = './a.jpg';
	$img_2 = './b.jpg';
    $time = date('Y-m-d H:i:s',time());//水印内容,我写的是当前时间,可修改
    //注意:imagecreatefromjpeg() 和 imagecreatefrompng()函数
    //文件真正的 mime 类型是 png 的类型 需要修改函数
    $image_1 = imagecreatefromjpeg($img_1);

    $textcolor = imagecolorallocate($image_1, 255, 255, 255); //设置水印字体颜色
    $font = __DIR__.'/msyh.ttf'; //定义字体,注意,如果是水印失败,请查看字体是否引入,路径是否正确
    imagettftext(
        $image_1,
        14, //字体大小
        0,
        30, //水印位置向右
        880, //水印位置向下
        $textcolor,
        $font,//字体
        $time//水印内容
    );//将文字写到图片中

    $image_2 = imagecreatefromjpeg($img_2);
    $image_3 = imagecreatetruecolor(imagesx($image_1),imagesy($image_1));
    imagecopymerge($image_3,$image_1,0,0,0,0,imagesx($image_1),imagesy($image_1),100);

    list($width,$height) = getimagesize($img_2); // 获取 b.jpg 图片的信息

    imagecopyresampled(
    	$image_3,
    	$image_2,
        $dst_x, 
        $dst_y, 
        0,
        0,
        $dst_w, 
        $dst_h, 
        $width, 
        $height 
    );

    $pic_name = md5(uniqid()).".jpg";
    imagejpeg($image_3,'./finalImages/'.$pic_name,50);//此处保存图片位置可以自定义,我只是提供例子随便写一个,记得修改
    imagedestroy($image_3);
    $imgName=$pic_name;
    return $imgName;
}

最终,返回的就是合成之后的图片名称,并且带有一个时间水印。
在文章开始部分,我就说过:html2canvas 这种方法实现这个需求,有兴趣的可以看一看。
本文介绍的方法,欢迎交流~~

猜你喜欢

转载自blog.csdn.net/gu_wen_jie/article/details/83417943