隨著社交媒體的普及,分享圖片已成為人們日常生活中常見的行為之一。在這個過程中,我們經常需要生成一些精美的海報圖來吸引他人的注意。本文將介紹如何使用PHP來生成海報圖并進行分享。
1. 準備工作
首先,我們需要準備以下數(shù)據和資源:
待生成海報圖的數(shù)據 $gData,包括圖片地址、標題、博客名稱和日期等信息。
用于生成二維碼的圖片 $codeName,可以是任意有效的二維碼圖片。
2. 圖片生成函數(shù)
我們將創(chuàng)建一個名為 createSharePng 的函數(shù)來生成海報圖。函數(shù)接收三個參數(shù):$gData(數(shù)據數(shù)組)、$codeName(二維碼圖片)和可選的 $fileName(保存文件名,默認為空)。
具體實現(xiàn)如下:
<?php /** * 分享圖片生成 * @param $gData 數(shù)據,array * @param $codeName 二維碼圖片 * @param $fileName string 保存文件名,默認空則直接輸入圖片 */ function createSharePng($gData, $codeName, $fileName = '') { //創(chuàng)建畫布 $width = 800; $height = 800; $im = imagecreatetruecolor($width, $height); //填充畫布背景色 //$color = imagecolorallocate($im, 85, 85, 85); $color = imagecolorallocate($im, 255, 255, 255); imagefill($im, 0, 0, $color); //字體文件 //$font_file_1 = "code_png/hanyishuaixiantiw.ttf"; $font_file_2 = "../assets/hanyixizhongyuan.ttf"; //設定字體的顏色 $font_color_title = ImageColorAllocate($im, 255, 255, 255); $font_color_1 = ImageColorAllocate($im, 28, 28, 28); $fang_bg_color_1 = ImageColorAllocate($im, 85, 85, 85); $fang_bg_color_2 = ImageColorAllocate($im, 255, 255, 255); //圖片 list($g_w, $g_h) = getimagesize($gData['pic']); $goodImg = createImageFromFile($gData['pic']); imagecopyresized($im, $goodImg, 0, 0, 0, 0, 800, 580, $g_w, $g_h); //---------- //imagefilledrectangle ($im, 0, 580, 580, 800, $fang_bg_color_1); //imagefilledrectangle ($im, 580, 580, 800, 800, $fang_bg_color_2); //二維碼 list($code_w, $code_h) = getimagesize($codeName); $codeImg = createImageFromFile($codeName); imagecopyresized($im, $codeImg, 600, 600, 0, 0, 180, 180, $code_w, $code_h); //描述 $theTitle = cn_row_substr($gData['title'], 2, 20); imagettftext($im, 20, 0, 20, 635, $font_color_1, $font_file_2, $theTitle[1]); imagettftext($im, 20, 0, 20, 680, $font_color_1, $font_file_2, $theTitle[2]); //imagettftext($im, 28,0, 20, 630, $font_color_1 ,$font_file_2, $gData["title"]); imagettftext($im, 13, 0, 20, 720, $font_color_1, $font_file_2, $gData["date"]); imagettftext($im, 18, 0, 20, 770, $font_color_1, $font_file_2, $gData["blogName"]); //輸出圖片 if ($fileName) { imagepng($im, $fileName); } else { Header("Content-Type: image/png"); imagepng($im); } //釋放空間 imagedestroy($im); imagedestroy($goodImg); imagedestroy($codeImg); } /** * 從圖片文件創(chuàng)建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); //執(zhí)行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; } } /** * 分行連續(xù)截取字符串 * @param $str 需要截取的字符串,UTF-8 * @param int $row 截取的行數(shù) * @param int $number 每行截取的字數(shù),中文長度 * @param bool $suffix 最后行是否添加‘...’后綴 * @return array 返回數(shù)組共$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); //每行實際字節(jié)長度 $oneRowNum = $number * 3; for ($r = 1; $r <= $row; $r++) { if ($r == $row and $theStrlen > $r * $oneRowNum and $suffix) { $result[$r] = mg_cn_substr($str, $oneRowNum - 6, ($r - 1) * $oneRowNum) . '...'; } else { $result[$r] = mg_cn_substr($str, $oneRowNum, ($r - 1) * $oneRowNum); } if ($theStrlen < $r * $oneRowNum) break; } return $result; } /** * 按字節(jié)截取utf-8字符串 * 識別漢字全角符號,全角中文3個字節(jié),半角英文1個字節(jié) * @param $str 需要切取的字符串 * @param $len 截取長度[字節(jié)] * @param int $start 截取開始位置,默認0 * @return string */ function mg_cn_substr($str, $len, $start = 0) { $q_str = ''; $q_strlen = ($start + $len) > strlen($str) ? strlen($str) : ($start + $len); //如果start不為起始位置,若起始位置為亂碼就按照UTF-8編碼獲取新start if ($start and json_encode(substr($str, $start, 1)) === false) { for ($a = 0; $a < 3; $a++) { $new_start = $start + $a; $m_str = substr($str, $new_start, 3); if (json_encode($m_str) !== false) { $start = $new_start; break; } } } //切取內容 for ($i = $start; $i < $q_strlen; $i++) { //ord()函數(shù)取得substr()的第一個字符的ASCII碼,如果大于0xa0的話則是中文字符 if (ord(substr($str, $i, 1)) > 0xa0) { $q_str .= substr($str, $i, 3); $i += 2; } else { $q_str .= substr($str, $i, 1); } } return $q_str; }
3. 實際使用方法
在準備好以上代碼后,我們可以按照以下步驟來生成海報圖:
定義待生成海報圖的數(shù)據 $gData。
調用 createSharePng 函數(shù),并傳入 $gData 和二維碼圖片地址 $codeName,可選擇是否提供保存文件名。
<?php $gData = [ 'pic' => 'http://www.zghlxwxcb.cn/style/images/logo.png', 'title' =>'文章標題文章標題文章標題文章標題文章標題文章標題文章標題文章標題', 'blogName' => '', 'date' => '2023/11/25' ]; // 直接輸出 createSharePng($gData,'http://www.zghlxwxcb.cn/?site=weixin&url=https://www.explame.com/'); // 輸出到圖片 createSharePng($gData,'http://www.zghlxwxcb.cn?site=weixin&url=https://www.explame.com/','images/share-' . time() . rand(10000, 99999) . '.jpg'); ?>
在調用 createSharePng 函數(shù)后,即可生成海報圖并將其輸出或保存為文件。文章來源:http://www.zghlxwxcb.cn/article/555.html
通過本文的方法,我們可以方便地使用PHP生成海報圖分享圖片。文章來源地址http://www.zghlxwxcb.cn/article/555.html
到此這篇關于使用PHP生成海報圖分享圖片的教程和方法的文章就介紹到這了,更多相關內容可以在右上角搜索或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!