商品海报生成 带商品名称,价格,二维码,图片
因为客户上传的商品图大小不一,所以加了一个原图裁剪方法 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 ; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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 让容器管理更轻松!