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

待我称王封你为后i 2022-05-14 15:18 567阅读 0赞

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

场景

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

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

实现

  1. /** * 合并背景图和用户上传图片并添加时间戳水印 * @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 返回合成后图片名称 */
  2. function composeImg($img_1,$img_2,$dst_x,$dst_y,$dst_w,$dst_h)
  3. {
  4. $img_1 = './a.jpg';
  5. $img_2 = './b.jpg';
  6. $time = date('Y-m-d H:i:s',time());//水印内容,我写的是当前时间,可修改
  7. //注意:imagecreatefromjpeg() 和 imagecreatefrompng()函数
  8. //文件真正的 mime 类型是 png 的类型 需要修改函数
  9. $image_1 = imagecreatefromjpeg($img_1);
  10. $textcolor = imagecolorallocate($image_1, 255, 255, 255); //设置水印字体颜色
  11. $font = __DIR__.'/msyh.ttf'; //定义字体,注意,如果是水印失败,请查看字体是否引入,路径是否正确
  12. imagettftext(
  13. $image_1,
  14. 14, //字体大小
  15. 0,
  16. 30, //水印位置向右
  17. 880, //水印位置向下
  18. $textcolor,
  19. $font,//字体
  20. $time//水印内容
  21. );//将文字写到图片中
  22. $image_2 = imagecreatefromjpeg($img_2);
  23. $image_3 = imagecreatetruecolor(imagesx($image_1),imagesy($image_1));
  24. imagecopymerge($image_3,$image_1,0,0,0,0,imagesx($image_1),imagesy($image_1),100);
  25. list($width,$height) = getimagesize($img_2); // 获取 b.jpg 图片的信息
  26. imagecopyresampled(
  27. $image_3,
  28. $image_2,
  29. $dst_x,
  30. $dst_y,
  31. 0,
  32. 0,
  33. $dst_w,
  34. $dst_h,
  35. $width,
  36. $height
  37. );
  38. $pic_name = md5(uniqid()).".jpg";
  39. imagejpeg($image_3,'./finalImages/'.$pic_name,50);//此处保存图片位置可以自定义,我只是提供例子随便写一个,记得修改
  40. imagedestroy($image_3);
  41. $imgName=$pic_name;
  42. return $imgName;
  43. }

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

发表评论

表情:
评论列表 (有 0 条评论,567人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js保存图片本地

    说明:可以实现下载图片,但是移动端浏览器不行,暂时没有实现,如果有知道的大哥留个言,让我改进一下,感谢。 操作步骤: 新建一个文件夹,将代码放入index.html,然后在文

    相关 PHP抓取远程图片本地保存

    最近在工作中需要开发了一个用户素材功能,里面需要将网上的各种图片素材进行本地化存储。于是在网上找了一些相关资料,并根据自身开发需要,整理了一下主要的逻辑代码。 /