商品海报生成 带商品名称,价格,二维码,图片

因为客户上传的商品图大小不一,所以加了一个原图裁剪方法 mkThumbnail (代码参考另一篇文章 https://www.cnblogs.com/gyrgyr/p/13726317.html )

生成图示例:(背景尺寸1066*1599)

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
public function getActivityImg($logo='',$template,$url,$goods_info)
    {
          $price = empty($goods_info['sg_vip_price']) || $goods_info['sg_vip_price']==0 ?$goods_info['sg_price']:$goods_info['sg_vip_price']; //商品价格
          $QR = "base.png";
          $last = "last.png";
          $errorCorrectionLevel = 'Q'; //防错等级
          $matrixPointSize = 3; //二维码大小
 
          //二维码位置
          $x = 815;
          $y = 625;
          //生成二维码
          //参数内容:二维码储存内容,生成存储,防错等级,二维码大小,白边大小
          Vendor('phpqrcode.phpqrcode');
          $object = new \QRcode();
          $object->png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 1);
 
          $last = $QR;
 
          //合成二维码图片跟 模板图片
          $path_1 = $template; //背景图
          $path_2 = $last//二维码图
          $dst = imagecreatefromstring(file_get_contents($path_1));
          $src = imagecreatefromstring(file_get_contents($path_2));
          list($src_w, $src_h) = getimagesize($path_2);
          imagecopymerge($dst, $src, $x, $y, 0, 0, $src_w, $src_h, 100);
 
          //商品图片缩放为新图片
          $EchoPath='./share_cod/-'.rand(99).time().'.png';
          $r = $this->mkThumbnail($goods_info['sg_img_url'],'418','408',$EchoPath);
          //商品图位置
          $goods_x = 176;
          $goods_y = 937;
          //合并商品图  与  二维码带背景
          $path_2 $EchoPath//商品图
          $src = imagecreatefromstring(file_get_contents($path_2));
          list($src_w, $src_h) = getimagesize($path_2);
          imagecopymerge($dst, $src, $goods_x, $goods_y, 0, 0, $src_w, $src_h, 100);
 
         
          //打上文字  商品名称
          $font = '/usr/share/fonts/chinese/msyhbd.ttf';
          $g_name = mb_substr($goods_info['sg_name'],0,10,'utf-8').'...';
          /*<br>            这块注释的是原来设计图文字是居中的,具体文字数量不确定,所以计算的居中位置,后来改为靠右,有了具体尺寸就不用了<br>                $fontBox = imagettfbbox(33, 0, $font, $g_name);
                $textx = ceil((896 - $fontBox[2]) / 2 ); //计算居中位置
                $black = imagecolorallocate($dst, 0x00, 0x00, 0x00);//字体
                $black = imagecolorallocate($dst, 0x00, 0x00, 0x00);//字体
                imagefttext($dst, 33, 0,  $textx,  290, $black, $font, $g_name);//字体颜色
          */
          $black = imagecolorallocate($dst, 254, 243, 222);//字体
          imagefttext($dst, 50, 0,  370,  270, $black, $font, $g_name);//字体颜色
 
          //打上文字 原价
          $black = imagecolorallocate($dst, 231,162,115);//字体
          imagefttext($dst, 30, 0,  552,  388, $black, $font, intval($goods_info['sg_y_price']));//字体颜色
          //打上文字 价格
          $black = imagecolorallocate($dst, 255,255,255);//字体
          imagefttext($dst, 35, 0,  810,  388, $black, $font, intval($price));//字体颜色 
          //打上文字 卖点
          $black = imagecolorallocate($dst, 255, 255, 255);//字体
          imagefttext($dst, 38, 0,  399,  530, $black, $font, $goods_info['sg_describe']);//字体颜色 
 
          //输出图片
          list($dst_w, $dst_h, $dst_type) = getimagesize($path_1);
          switch ($dst_type) {
                case 1://GIF
                    $typ = 'gif';
                    break;
                case 2://JPG
                    $typ = 'jpg';
                    break;
                case 3://PNG
                    $typ = 'png';
                    break;
                default:
                    break;
            }
 
       
         //输出到本地文件夹,返回生成图片的路径
         $fileName= get_mpid().'_'.$goods_info['sg_id'].time();
         $EchoPath='./Images/share_img/'.$fileName.'.'.$typ;
         imagepng($dst,$EchoPath);
         imagedestroy($dst);
         imagedestroy($src);
         return   $EchoPath;
    }

 

posted @   戈丫汝  阅读(555)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示