php+GD库生成推广图-微信推广
浏览量:439
<?php /** * 批量导入csv文件 * @author lianghuiju@chuchujie.com * @lastModifyTime 2018/05/26 * @lastModify lianghuiju@chuchujie.com */ ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>批量生成图片</title> <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css"> </head> <body> <div style="margin: 10px auto 12px;padding-left: 50px;clear: both;"> <span style="position: relative;margin-right: 8px;border-radius: 5px;display: inline-block;width: 300px;height: 30px;border: 1px solid #bbb;"> <input type="text" id="text-input" style="margin: 0;width: 286px;height: 22px;border: none;" placeholder= "选择文件"/> <input type="file" id="file-input" style="position: absolute;margin: 0;top: 0;left: 0;width: 300px;height: 30px;filter:alpha(opacity=0);-moz-opacity:0.0;-khtml-opacity: 0.0;opacity: 0.0;cursor:pointer;" title="点击上传"/> </span> <input type="radio" name="type" checked="checked" value='1' /><label style="display: inline-block">长条形</label> <input type="radio" name="type" value='2' /><label style="display: inline-block">正方形</label> <input type="radio" name="type" value='3' /><label style="display: inline-block">打标</label> <button id="batch-import" class="btn btn-success" >开始生成图片</button> </div> <div style="margin: 10px auto 12px;padding-left: 50px;clear: both;" > <p id="import-status">待导入...</p> <div style="width: 370px;height: 16px;border: 1px solid #ccc;border-radius: 10px;float: left;"> <span id="progress-status" style="display: inline-block;background: #85c440;border-radius: 10px;height: 18px;"></span> </div> <div id="progress-text" style="margin-left:3px; width: 40px; text-align:right; height:18px;line-height:18px;float:left;">0%</div> <div style="padding-left: 50px;clear: both;"> <ul style="margin-top: 12px;padding: 6px 0 4px;line-height: 30px;" id="error-list"></ul> </div> </div> <div style="margin: 10px auto 12px;padding-left: 50px;clear: both;" > <a href="createImg.php" target="_blank" style="font-size: 16px">手动生成图片</a> <a href="limitTimeBuy.php" target="_blank" style="font-size: 16px">生成限时抢图片</a> <a href="tbToastImg.php" target="_blank" style="font-size: 16px">生成淘宝商品弹窗图</a> </div> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> var url = "/123/admin/app.php?method=createMpCardImg"; $(document).ready(function(){ $('#batch-import').bind('click', startImport); $('#file-input').change(function(){ $('#text-input').val(this.value); }); }); var pushData = []; var dataLength = 0; var statusHint = $('#import-status'); var type = ''; function startImport() { type = $('input[name="type"]:checked').val(); if (typeof FileReader === "undefined"){ alert("请使用最新版Chrome浏览器"); return; } var fileInput = $('#file-input');//获取文件组件对象 if (fileInput.length < 1 || typeof fileInput[0].files === "undefined"){ alert("没有找到文件上传控件"); return; } if (fileInput[0].files.length < 1){ alert("请选择要导入的文件"); return; } var rltFile = fileInput[0].files[0];//获取文件信息对象 var ext = /\.[^\.]+/.exec(rltFile.name); if (ext[0] !== ".csv"){ alert("文件格式不正确,请导入csv文件"); return; } var buttonObj = $(this); //按钮对象 buttonObj.attr("disabled", true); statusHint.text('导入中...'); var fileReader = new FileReader();//new一个文件读取对象 fileReader.readAsText(rltFile, "GB2312"); fileReader.onload = function (ev) { var lines = fileReader.result.split("\n"); for (var i = 1; i <= lines.length; i++){ //从1开始,不读表头 if (!lines[i] || typeof lines[i].split === "undefined"){ continue; } var tempData = lines[i].split(","); var data = { "type" : type, "product_name" : tempData[0], "product_id" : tempData[1], "product_price": tempData[2], "product_benefit_one": tempData[3], "product_benefit_two": tempData[4] }; pushData.push(data) } dataLength = pushData.length; startPush(); }; } function startPush() { if (dataLength < 0) { statusHint.text("没有数据被导入"); return; } var progress = $('#progress-status'); var pt = $('#progress-text'); var eul = $('#error-list'); var downloadAct = document.getElementById('download_img'); var imgBlob = null; var url = null; if (pushData.length <= 0) { statusHint.text('导入完成!'); progress.css('width', '100%'); pt.text('100%'); $('#btn-import').attr('disabled', false); return; } else { var w = Math.round(((dataLength - pushData.length) / dataLength) * 100); progress.css('width', w + '%'); pt.text(w + '%'); } var item = pushData.shift(); //删除一个元素并返回元素的值 $.ajax({ url : url, type : 'POST', data : item, dataType: 'json', success : function(d){ if (0 == parseInt(d.errno)) { imgBlob = dataURLtoBlob(d.data.image); url = URL.createObjectURL(imgBlob); downloadAct.setAttribute('href',url); downloadAct.setAttribute('download', item.product_id + '.jpg'); downloadAct.click(); } else { eul.append($('<li>'+item.product_name+':'+item.product_id+'['+d.msg+']</li>')); } startPush(); } }); } function dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime }); } </script> </body> </html>
生成原始图片:
php后台操作
<?php define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR); $method = trim($_REQUEST['method']); if ($method == "createMpCardImg") { $res = createMpCardImg(); }else if($method == "createLimitBuyCardImg"){ $res = createLimitBuyCardImg(); }else if( $method =='createTbToastImg'){ $res = createTbToastImg(); } /** * 生成宣传图 * author :lianghuiju@chuchujie.com * function_name : createMpCardImg * datetime : 2019/6/21 * description : */ function createMpCardImg() { $productName = $_REQUEST['product_name']; $productId = trim($_REQUEST['product_id']); $productPrice = $_REQUEST['product_price']; $productBenefitOne = isset($_REQUEST['product_benefit_one']) ? $_REQUEST['product_benefit_one'] : ''; $productBenefitTwo = isset($_REQUEST['product_benefit_two']) ? $_REQUEST['product_benefit_two'] : ''; $type = $_REQUEST['type']; $downloadType = isset($_REQUEST['download_type']) ? $_REQUEST['download_type'] : 0; $downloadType = isset($downloadType) ? $downloadType : 0; if (empty($productId) || !is_numeric($productId) || empty($type)) { renderOutput(array(), 1, 'param error', true); } $productBenefit = $productBenefitOne . ' ' . $productBenefitTwo; $productDetailUrl = 'https://api-product.chuchujie.com/api.php'; $data = array( 'channel' => 'QD_appstore', 'package_name' => 'com.culiukeji.huanletao', 'client_version' => '3.9.101', 'ageGroup' => 'AG_0to24', 'client_type' => 'WAP', 'api_version' => 'v5', 'imei' => '', 'gender' => '1', 'token' => '', 'userId' => '', 'front_version' => '201801041124', 'method' => 'product_detail', 'product_id' => $productId ); $productData = array('data' => json_encode($data)); $headers = array('content-type' => 'application/x-www-form-urlencoded', 'charset' => 'UTF-8'); $productDetail = httpPost($productDetailUrl, $productData, $headers, true); if (empty($productDetail['data']['product'])) { renderOutput(array(), 1, '获取商品信息错误', true); } $productImg = $productDetail['data']['product']['image_urls_head'][0]; $handleText = function ($text) { mb_internal_encoding("UTF-8"); $len = mb_strlen($text); if ($len > 10) { $text = substr_replace($text, '...', 30); } return $text; }; //设置字体路径 putenv('GDFONTPATH=' . realpath('.')); $font = ROOT_PATH."font/PingFang.ttc"; if ($type == 1) { //打开底图 $im = @imagecreatefromjpeg(ROOT_PATH.'images/mp_card_cfx.jpg'); if (!$im) { renderOutput(array(), 2, 'get image failed', true); } $page_width = 744; //图片标准宽度 $name_font_size = 26; $copy_img_size = 250; $black = imagecolorallocate($im, 0, 0, 0); $white = imagecolorallocate($im, 255, 255, 255); $ccjRed = imagecolorallocate($im, 227, 51, 93); $red = imagecolorallocate($im, 255, 0, 0); //处理商品图 $goods_tmp_str = file_get_contents($productImg); $goods_im = imagecreatetruecolor($copy_img_size, $copy_img_size); imagefill($goods_im, 0, 0, $white); if ($goods_tmp_str) { $goods_tmp_im = imagecreatefromstring($goods_tmp_str); if (is_resource($goods_tmp_im)) { imagecolorallocate($goods_im, 255, 255, 255); $g_src_w = imagesx($goods_tmp_im); $g_src_h = imagesy($goods_tmp_im); imagecopyresized($goods_im, $goods_tmp_im, 0, 0, 0, 0, $copy_img_size, $copy_img_size, $g_src_w, $g_src_h); } else { renderOutput(array(), 3, 'create image failed', true); } } else { renderOutput(array(), 4, 'create image failed', true); } imagecopy($im, $goods_im, 30, 26, 0, 0, $copy_img_size, $copy_img_size); //商品图 //处理商品名 $name1Lines = $productName; $name1_x = 325; imagettftext($im, $name_font_size, 0, $name1_x, 55, $black, $font, $name1Lines); imagettftext($im, $name_font_size, 0, $name1_x, 55, $black, $font, $name1Lines); //处理利益点 $name2Lines = $productBenefit; $name2_x = 330; imagettftext($im, 21, 0, $name2_x, 130, $black, $font, $name2Lines); //处理价格 $name3Lines = $productPrice; $name3_x = 465; imagettftext($im, 29, 0, $name3_x, 265, $ccjRed, $font, $name3Lines); } else if ($type == 2) { //打开底图 $im = @imagecreatefromjpeg(ROOT_PATH.'images/mp_card_zfx.jpg'); if (!$im) { renderOutput(array(), 2, 'get image failed', true); } $page_width = 364; //图片标准宽度 $name_font_size = 24; $copy_img_size = 358; $black = imagecolorallocate($im, 0, 0, 0); $white = imagecolorallocate($im, 255, 255, 255); $ccjRed = imagecolorallocate($im, 227, 51, 93); $red = imagecolorallocate($im, 255, 0, 0); //处理商品图 $goods_tmp_str = file_get_contents($productImg); $goods_im = imagecreatetruecolor($copy_img_size, $copy_img_size); imagefill($goods_im, 0, 0, $white); if ($goods_tmp_str) { $goods_tmp_im = imagecreatefromstring($goods_tmp_str); if (is_resource($goods_tmp_im)) { imagecolorallocate($goods_im, 255, 255, 255); $g_src_w = imagesx($goods_tmp_im); $g_src_h = imagesy($goods_tmp_im); imagecopyresized($goods_im, $goods_tmp_im, 0, 0, 0, 0, $copy_img_size, $copy_img_size, $g_src_w, $g_src_h); } else { renderOutput(array(), 3, 'create image failed', true); } } else { renderOutput(array(), 4, 'create image failed', true); } imagecopy($im, $goods_im, 3, 10, 0, 0, $copy_img_size, $copy_img_size); //商品图 //处理商品名 $name1Lines = $productName; $name1Bbox = imagettfbbox($name_font_size, 0, $font, $name1Lines); $name1_width = $name1Bbox[4] - $name1Bbox[0]; $name1_x = round($page_width / 2) - round($name1_width / 2); $name1_y = 410; imagettftext($im, $name_font_size, 0, $name1_x, $name1_y, $black, $font, $name1Lines); imagettftext($im, $name_font_size, 0, $name1_x, $name1_y, $black, $font, $name1Lines); //处理价格 $name3Lines = $productPrice; $name3_x = 138; imagettftext($im, 27, 0, $name3_x, 456, $red, $font, $name3Lines); } else if ($type == 3) { //打开底图 $im = @imagecreatefromjpeg(ROOT_PATH.'images/99base.jpg'); if (!$im) { renderOutput(array(), 2, 'get image failed', true); } $page_width = 400; //图片标准宽度 $copy_img_size = 400; $black = imagecolorallocate($im, 0, 0, 0); $white = imagecolorallocate($im, 255, 255, 255); $ccjRed = imagecolorallocate($im, 227, 51, 93); $red = imagecolorallocate($im, 255, 0, 0); //处理商品图 $goods_tmp_str = file_get_contents($productImg); $goods_im = imagecreatetruecolor($copy_img_size, $copy_img_size); imagefill($goods_im, 0, 0, $white); if ($goods_tmp_str) { $goods_tmp_im = imagecreatefromstring($goods_tmp_str); if (is_resource($goods_tmp_im)) { imagecolorallocate($goods_im, 255, 255, 255); $g_src_w = imagesx($goods_tmp_im); $g_src_h = imagesy($goods_tmp_im); imagecopyresized($goods_im, $goods_tmp_im, 0, 0, 0, 0, $copy_img_size, $copy_img_size, $g_src_w, $g_src_h); } else { renderOutput(array(), 3, 'create image failed', true); } } else { renderOutput(array(), 4, 'create image failed', true); } imagecopy($im, $goods_im, 3, 10, 0, 0, $copy_img_size, $copy_img_size); //商品图 //处理角标图 $mark_tmp_str = file_get_contents(ROOT_PATH.'images/99mark.png'); $mark_im = imagecreatetruecolor(150, 60); imagesavealpha($mark_im, true); $hyaline = imagecolorallocatealpha($mark_im, 255, 0, 0, 127); imagefill($mark_im, 0, 0, $hyaline); if ($mark_tmp_str) { $mark_tmp_im = imagecreatefromstring($mark_tmp_str); if (is_resource($mark_tmp_im)) { imagecolorallocate($mark_im, 255, 255, 255); $g_src_w = imagesx($mark_tmp_im); $g_src_h = imagesy($mark_tmp_im); imagecopyresized($mark_im, $mark_tmp_im, 0, 0, 0, 0, 150, 60, $g_src_w, $g_src_h); } else { renderOutput(array(), 3, 'create image failed', true); } } else { renderOutput(array(), 4, 'create image failed', true); } imagecopy($im, $mark_im, 0, 0, 0, 0, 150, 60); //角标图 //$imMark = @imagecreatefrompng(ROOT_PATH.'images/99mark.png'); //imagecopymerge($im, $imMark,0,0,0,0,150,60,100); } ob_start(); imagejpeg($im, NULL, 100); //图片质量 100 $contents = ob_get_clean(); //header("Content-Type: image/jpeg"); //echo $contents; if ($downloadType) { $finishFileName = $productId . '.jpg'; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $finishFileName); header('Content-Transfer-Encoding: binary'); echo $contents; exit(); } $imageContents = 'data:image/jpeg;base64,' . base64_encode($contents); $data = array('image' => $imageContents); renderOutput($data, 0, 'success', true); } /** * 生成限时抢图片 * author :lianghuiju@chuchujie.com * function_name : createLimitBuyCardImg * datetime : 2019/6/21 * description : */ function createLimitBuyCardImg() { $scene = $_REQUEST['scene']; $productOneId = $_REQUEST['product_one_id']; $productOnePrice = $_REQUEST['product_one_price']; $productTwoId = $_REQUEST['product_two_id']; $productTwoPrice = $_REQUEST['product_two_price']; $productThreeId = $_REQUEST['product_three_id']; $productThreePrice = $_REQUEST['product_three_price']; $productOneId = trim($productOneId); $productTwoId = trim($productTwoId); $productThreeId = trim($productThreeId); if (empty($productOneId) || empty($productTwoId) || empty($productThreeId)) { echo "<script>alert('参数错误');window.history.back(-1);</script>"; die; } $productIds = array($productOneId, $productTwoId, $productThreeId); $productPriceArr = array($productOnePrice, $productTwoPrice, $productThreePrice); $productDetailUrl = 'https://api-product.chuchujie.com/api.php'; $productInfo = array(); $finishFileName = ''; foreach ($productIds as $k => $productId) { $data = array( 'channel' => 'QD_appstore', 'package_name' => 'com.culiukeji.huanletao', 'client_version' => '3.9.101', 'ageGroup' => 'AG_0to24', 'client_type' => 'WAP', 'api_version' => 'v5', 'imei' => '', 'gender' => '1', 'token' => '', 'userId' => '', 'front_version' => '201801041124', 'method' => 'product_detail', 'product_id' => $productId ); $productData = array('data' => json_encode($data)); $headers = array('content-type' => 'application/x-www-form-urlencoded', 'charset' => 'UTF-8'); $productDetail = httpPost($productDetailUrl, $productData, $headers, true); if (empty($productDetail['data']['product'])) { echo "<script>alert('获取商品信息错误,商品id-' + $productId);window.history.back(-1);</script>"; die; } $productInfo[$k]['productImg'] = $productDetail['data']['product']['image_urls_head'][0]; $productInfo[$k]['productPrice'] = $productPriceArr[$k]; $finishFileName .= $productId . '-'; } $finishFileName = rtrim($finishFileName, '-'); $finishFileName .= '.jpg'; //设置字体路径 putenv('GDFONTPATH=' . realpath('.')); $font = ROOT_PATH.'font/PingFang.ttc'; //打开底图 $baseImgFilePath = ROOT_PATH.'images/limit' . $scene . '.jpg'; $im = imagecreatefromjpeg($baseImgFilePath); if (!$im) { echo "<script>alert('获取模板图错误'); window.history.back(-1);</script>"; die; } $price_font_size = 22; $copy_img_size = 232; $black = imagecolorallocate($im, 0, 0, 0); $white = imagecolorallocate($im, 255, 255, 255); $ccjRed = imagecolorallocate($im, 227, 51, 93); $red = imagecolorallocate($im, 255, 0, 0); foreach ($productInfo as $k => $subProductInfo) { $productImg = $subProductInfo['productImg']; $productPrice = $subProductInfo['productPrice']; //处理商品图 $goods_tmp_str = file_get_contents($productImg); $goods_im = imagecreatetruecolor($copy_img_size, $copy_img_size); imagefill($goods_im, 0, 0, $white); if ($goods_tmp_str) { $goods_tmp_im = imagecreatefromstring($goods_tmp_str); if (is_resource($goods_tmp_im)) { imagecolorallocate($goods_im, 255, 255, 255); $g_src_w = imagesx($goods_tmp_im); $g_src_h = imagesy($goods_tmp_im); imagecopyresized($goods_im, $goods_tmp_im, 0, 0, 0, 0, $copy_img_size, $copy_img_size, $g_src_w, $g_src_h); } else { echo "<script>alert('构造商品图错误');window.history.back(-1);</script>"; die; } } else { echo "<script>alert('创建商品图错误');window.history.back(-1);</script>"; die; } if ($k == 0) { $img_x = 58; $price_x = 208; } else if ($k == 1) { $img_x = 343; $price_x = 494; } else { $img_x = 629; $price_x = 784; } $img_y = 92; $price_y = 356; imagecopy($im, $goods_im, $img_x, $img_y, 0, 0, $copy_img_size, $copy_img_size); //商品图 //处理价格 imagettftext($im, $price_font_size, 0, $price_x, $price_y, $red, $font, $productPrice); imagettftext($im, $price_font_size, 0, $price_x, $price_y, $red, $font, $productPrice); imagettftext($im, $price_font_size, 0, $price_x + 2, $price_y, $red, $font, $productPrice); imagettftext($im, $price_font_size, 0, $price_x + 2, $price_y, $red, $font, $productPrice); } ob_start(); imagejpeg($im, null, 100); //图片质量 100 $contents = ob_get_clean(); //header("Content-Type: image/jpeg"); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $finishFileName); header('Content-Transfer-Encoding: binary'); echo $contents; exit(); } /** * 生成淘宝商品弹窗图 * author :lianghuiju@chuchujie.com * function_name : createTbToastImg * datetime : 2019/6/21 * description : */ function createTbToastImg() { $productOnePrice = $_REQUEST['product_one_price']; $productOneTitle = $_REQUEST['product_one_title']; $productImgOne = isset($_FILES['product_img_one']) ? $_FILES['product_img_one'] : array(); if (empty($productImgOne)) { echo "<script>alert('图片上传错误');window.history.back(-1);</script>"; die; } if (($productImgOne['size'] / 1024) > 200) { echo "<script>alert('商品图片需小于200KB');window.history.back(-1);</script>"; die; } if (empty($productOnePrice) || !is_numeric($productOnePrice) || empty($productOneTitle)) { echo "<script>alert('商品一信息错误');window.history.back(-1);</script>"; die; } $productOnePrice = trim($productOnePrice); $productOneTitle = trim($productOneTitle); //设置字体路径 putenv('GDFONTPATH=' . realpath('.')); $font = ROOT_PATH.'font/PingFang.ttc'; //打开底图 $baseImgFilePath = ROOT_PATH.'images/mp_card_scfx.jpg'; $copyImgSize = 600; $priceFontSize = 58; $imgX = 74; $imgY = 50; $priceX = 436; $priceY = 845; $im = @imagecreatefromjpeg($baseImgFilePath); if (!$im) { echo "<script>alert('获取模板图错误'); window.history.back(-1);</script>"; die; } $black = imagecolorallocate($im, 0, 0, 0); $white = imagecolorallocate($im, 255, 255, 255); $ccjRed = imagecolorallocate($im, 227, 51, 93); $red = imagecolorallocate($im, 255, 0, 0); //处理商品图 $productOneImage = file_get_contents($productImgOne['tmp_name']); $goods_im = imagecreatetruecolor($copyImgSize, $copyImgSize); imagefill($goods_im, 0, 0, $white); if ($productOneImage) { $goods_tmp_im = imagecreatefromstring($productOneImage); if (is_resource($goods_tmp_im)) { imagecolorallocate($goods_im, 255, 255, 255); $g_src_w = imagesx($goods_tmp_im); $g_src_h = imagesy($goods_tmp_im); imagecopyresized($goods_im, $goods_tmp_im, 0, 0, 0, 0, $copyImgSize, $copyImgSize, $g_src_w, $g_src_h); } else { echo "<script>alert('构造商品图错误');window.history.back(-1);</script>"; die; } } else { echo "<script>alert('创建商品图错误');window.history.back(-1);</script>"; die; } imagecopy($im, $goods_im, $imgX, $imgY, 0, 0, $copyImgSize, $copyImgSize); //商品图 //处理商品名 $name1Lines = $productOneTitle; $name_font_size = 38; $productTitleBox = imagettfbbox($name_font_size, 0, $font, $name1Lines); $productTitleWidth = $productTitleBox[4] - $productTitleBox[0]; $name1_x = 375 - round($productTitleWidth / 2); $name1_y = 730; imagettftext($im, $name_font_size, 0, $name1_x, $name1_y, $black, $font, $name1Lines); imagettftext($im, $name_font_size, 0, $name1_x, $name1_y, $black, $font, $name1Lines); //处理价格 imagettftext($im, $priceFontSize, 0, $priceX, $priceY, $ccjRed, $font, $productOnePrice); imagettftext($im, $priceFontSize, 0, $priceX, $priceY, $ccjRed, $font, $productOnePrice); ob_start(); imagejpeg($im); $contents = ob_get_clean(); //header("Content-Type: image/jpeg"); $finishFileName = $productOneTitle . '.jpg'; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $finishFileName); header('Content-Transfer-Encoding: binary'); echo $contents; exit(); } /** * 生成唯一id * @return string * author :lianghuiju@chuchujie.com * function_name : makeUniqId * datetime : 2019/6/21 * description : */ function makeUniqId() { $chars = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' ); $charsLen = count($chars) - 1; shuffle($chars); $output = ""; for ($i = 0; $i < 12; $i++) { $output .= $chars[mt_rand(0, $charsLen)]; } return date('YmdHis') . $output; } /** * Curl Post请求 * @param $url * @param null $data * @param array $headers * @param bool $buildQuery * @param bool $toArray * @param null $cookie * @return mixed|string * author :lianghuiju@chuchujie.com * function_name : httpPost * datetime : 2019/6/21 * description : */ function httpPost($url, $data = null, $headers = array(), $buildQuery = false, $toArray = true, $cookie = null) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_POST, TRUE); if ($buildQuery) { curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); } else { curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } //设置header头参数 if (!empty($headers)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } if (!empty($cookie)) { curl_setopt($ch, CURLOPT_COOKIE, $cookie); } $rlt = curl_exec($ch); if ($toArray) { $rlt = json_decode($rlt, true); } if (curl_errno($ch)) { $msg = curl_error($ch); $curl_errno = curl_errno($ch); log_message('error', "Curl Error {$curl_errno}:{$msg} method[POST] url[$url]"); return $msg; } curl_close($ch); return $rlt; } /** * 通用HttpGet请求方法 * @param $url * @param array $headers * @param bool $toArray * @return mixed * author :lianghuiju@chuchujie.com * function_name : httpGet * datetime : 2019/6/21 * description : */ function httpGet($url, $headers = array(), $toArray = true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 2000); curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000); //设置header头参数 if (!empty($headers)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } $curlRlt = curl_exec($ch); if ($toArray) { $curlRlt = json_decode($curlRlt, true); } $curl_errno = curl_errno($ch); if ($curl_errno) { $curl_error = curl_error($ch); $errmsg = "Curl Error {$curl_errno}:{$curl_error} method[GET] url[$url]"; log_message('ERROR', $errmsg); } curl_close($ch); return $curlRlt; } function renderOutput($data = array(), $errno = 0, $msg = '', $exit = false) { $result = json_encode(compact('errno', 'msg', 'data')); echo $result; if ($exit == true || $errno == 0) { die; } }
font字体需要自己下载,太多选择,符合自己的字体就好,我用的ADOBEHEITISTD-REGULAR.OTF和PingFang.ttc
神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。