PHP分享图 片的生成方法
发布时间:2023-02-14 13:09:21 所属栏目:数码 来源:
导读: 最近工作需求需要生成分享图片,最初用js的html2canvas截图插件各种问题,后来干脆PHP的PG库在后台生成图片,很愉快的解决了各种问题,我们要实现的效果如下图:
假设代码中用到的资源文件夹在当前code_
假设代码中用到的资源文件夹在当前code_
|
最近工作需求需要生成分享图片,最初用js的html2canvas截图插件各种问题,后来干脆PHP的PG库在后台生成图片,很愉快的解决了各种问题,我们要实现的效果如下图: 假设代码中用到的资源文件夹在当前code_png目录下: php代码: //填充画布背景色 $color = imagecolorallocate($im,255,255); imagefill($im,$color); //字体文件 $font_file = "code_png/msyh.ttf"; $font_file_bold = "code_png/msyh_bold.ttf"; //设定字体的颜色 $font_color_1 = ImageColorAllocate ($im,140,140); $font_color_2 = ImageColorAllocate ($im,28,28); $font_color_3 = ImageColorAllocate ($im,129,129); $font_color_red = ImageColorAllocate ($im,217,45,32); $fang_bg_color = ImageColorAllocate ($im,254,216,217); //Logo list($l_w,$l_h) = getimagesize('code_png/logo100_100.png'); $logoImg = @imagecreatefrompng('code_png/logo100_100.png'); imagecopyresized($im,$logoImg,274,70,$l_w,$l_h); //温馨提示 imagettftext($im,14,100,130,$font_color_1,$font_file,'温馨提示:喜欢长按图片识别二维码即可前往购买'); //商品图片 list($g_w,$g_h) = getimagesize($gData['pic']); $goodImg = createImageFromFile($gData['pic']); imagecopyresized($im,$goodImg,185,618,$g_w,$g_h); //二维码 list($code_w,$code_h) = getimagesize($codeName); $codeImg = createImageFromFile($codeName); imagecopyresized($im,$codeImg,440,820,170,$code_w,$code_h); //商品描述 $theTitle = cn_row_substr($gData['title'],2,19); imagettftext($im,8,845,$font_color_2,$theTitle[1]); imagettftext($im,875,$theTitle[2]); imagettftext($im,935,"券后价¥"); imagettftext($im,80,$font_color_red,$font_file_bold,$gData["price"]); imagettftext($im,970,$font_color_3,"现价¥".$gData["original_price"]); //优惠券 if($gData['coupon_price']){ imagerectangle ($im,125,950,160,975,$font_color_3); imagefilledrectangle ($im,126,951,159,974,$fang_bg_color); imagettftext($im,135,"券"); $coupon_price = strval($gData['coupon_price']); imagerectangle ($im,198 + (strlen($coupon_price)* 10),$font_color_3); imagettftext($im,$coupon_price."元"); } //输出图片 if($fileName){ imagepng ($im,$fileName); }else{ Header("Content-Type: image/png"); imagepng ($im); } //释放空间 imagedestroy($im); imagedestroy($goodImg); imagedestroy($codeImg); } /** 从图片文件创建Image资源 @param $file 图片文件,支持url @return bool|resource 成功返回图片image资源,失败返回false */ function createImageFromFile($file){ if(preg_match('/http(s)?:\/\//',$file)){ $fileSuffix = getNetworkImgType($file); }else{ $fileSuffix = pathinfo($file,PATHINFO_EXTENSION); } if(!$fileSuffix) return false; switch ($fileSuffix){ case 'jpeg': $theImage = @imagecreatefromjpeg($file); break; case 'jpg': $theImage = @imagecreatefromjpeg($file); break; case 'png': $theImage = @imagecreatefrompng($file); break; case 'gif': $theImage = @imagecreatefromgif($file); break; default: $theImage = @imagecreatefromstring(file_get_contents($file)); break; } return $theImage; } /** 获取网络图片类型 @param $url 网络图片url,支持不带后缀名url @return bool */ function getNetworkImgType($url){ $ch = curl_init(); //初始化curl curl_setopt($ch,CURLOPT_URL,$url); //设置需要获取的URL curl_setopt($ch,CURLOPT_NOBODY,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,3);//设置超时 curl_setopt($ch,CURLOPT_TIMEOUT,3); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); //支持https curl_exec($ch);//执行curl会话 $http_code = curl_getinfo($ch);//获取curl连接资源句柄信息 curl_close($ch);//关闭资源连接 if ($http_code['http_code'] == 200) { $theImgType = explode('/',$http_code['content_type']); if($theImgType[0] == 'image'){ return $theImgType[1]; }else{ return false; } }else{ return false; } } /** 分行连续截取字符串 @param $str 需要截取的字符串,UTF-8 @param int $row 截取的行数 @param int $number 每行截取的字数,中文长度 @param bool $suffix 最后行是否添加‘...'后缀 @return array 返回数组共$row个元素,下标1到$row */ function cn_row_substr($str,$row = 1,$number = 10,$suffix = true){ $result = array(); for ($r=1;$r<=$row;$r++){ $result[$r] = ''; } $str = trim($str); if(!$str) return $result; $theStrlen = strlen($str); (编辑:海洋资讯信息网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


