首頁 >後端開發 >php教程 >PHP生成推廣海報步驟詳解

PHP生成推廣海報步驟詳解

php中世界最好的语言
php中世界最好的语言原創
2018-05-16 15:05:371477瀏覽

這次帶給大家PHP生成推廣海報步驟詳解,PHP產生推廣海報的注意事項有哪些,以下就是實戰案例,一起來看一下。

常有這樣的需求,就是需要在產生推廣海報,包含指定的二維碼,分享出去別人掃碼之後就可以確定用戶推薦關係。

仔細分析一下,推廣海報必要的要素是海報背景圖和二維碼,這兩者都容易生成,但要兩者結合到一起組合成為一張圖二維還要可以保存到本地便於分享出去,這就是難點了,在H5中可以藉助canvas畫出來完成類似截圖的功能,但放到小程式裡邊很多限制。那我們就直接在後台產生海報,前台直接呼叫。

前期準備:

1.海报背景图,背景图一般存服务器,程序本地读取;
2.推广二维码,可以是二维码图片链接,也可以是字符串图像流,如果自己生成二维码,详见:使用phpqrcode生成二维码。

方法如下:

/**
生成宣传海报
@param array 参数,包括图片和文字
@param string $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片
@return [type] [description]
*/
function createPoster($config=array(),$filename=""){
//如果要看报什么错,可以先注释调这个header
if(empty($filename)) header("content-type: image/png");
$imageDefault = array(
'left'=>0,
'top'=>0,
'right'=>0,
'bottom'=>0,
'width'=>100,
'height'=>100,
'opacity'=>100
);
$textDefault = array(
'text'=>'',
'left'=>0,
'top'=>0,
'fontSize'=>32, //字号
'fontColor'=>'255,255,255', //字体颜色
'angle'=>0,
);
$background = $config['background'];//海报最底层得背景
//背景方法
$backgroundInfo = getimagesize($background);
$backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
$background = $backgroundFun($background);
$backgroundWidth = imagesx($background); //背景宽度
$backgroundHeight = imagesy($background); //背景高度
$imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
$color = imagecolorallocate($imageRes, 0, 0, 0);
imagefill($imageRes, 0, 0, $color);
// imageColorTransparent($imageRes, $color); //颜色透明
imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
//处理了图片
if(!empty($config['image'])){
foreach ($config['image'] as $key => $val) {
$val = array_merge($imageDefault,$val);
$info = getimagesize($val['url']);
$function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
if($val['stream']){ //如果传的是字符串图像流
$info = getimagesizefromstring($val['url']);
$function = 'imagecreatefromstring';
}
$res = $function($val['url']);
$resWidth = $info[0];
$resHeight = $info[1];
//建立画板 ,缩放图片至指定尺寸
$canvas=imagecreatetruecolor($val['width'], $val['height']);
imagefill($canvas, 0, 0, $color);
//关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
$val[&#39;left&#39;] = $val[&#39;left&#39;]<0?$backgroundWidth- abs($val[&#39;left&#39;]) - $val[&#39;width&#39;]:$val[&#39;left&#39;];
$val[&#39;top&#39;] = $val[&#39;top&#39;]<0?$backgroundHeight- abs($val[&#39;top&#39;]) - $val[&#39;height&#39;]:$val[&#39;top&#39;];
//放置图像
imagecopymerge($imageRes,$canvas, $val[&#39;left&#39;],$val[&#39;top&#39;],$val[&#39;right&#39;],$val[&#39;bottom&#39;],$val[&#39;width&#39;],$val[&#39;height&#39;],$val[&#39;opacity&#39;]);//左,上,右,下,宽度,高度,透明度
}
}
//处理文字
if(!empty($config[&#39;text&#39;])){
foreach ($config[&#39;text&#39;] as $key => $val) {
$val = array_merge($textDefault,$val);
list($R,$G,$B) = explode(&#39;,&#39;, $val[&#39;fontColor&#39;]);
$fontColor = imagecolorallocate($imageRes, $R, $G, $B);
$val[&#39;left&#39;] = $val[&#39;left&#39;]<0?$backgroundWidth- abs($val[&#39;left&#39;]):$val[&#39;left&#39;];
$val[&#39;top&#39;] = $val[&#39;top&#39;]<0?$backgroundHeight- abs($val[&#39;top&#39;]):$val[&#39;top&#39;];
imagettftext($imageRes,$val[&#39;fontSize&#39;],$val[&#39;angle&#39;],$val[&#39;left&#39;],$val[&#39;top&#39;],$fontColor,$val[&#39;fontPath&#39;],$val[&#39;text&#39;]);
}
}
//生成图片
if(!empty($filename)){
$res = imagejpeg ($imageRes,$filename,90); //保存到本地
imagedestroy($imageRes);
if(!$res) return false;
return $filename;
}else{
imagejpeg ($imageRes); //在浏览器上显示
imagedestroy($imageRes);
}
}

使用範例一:產生帶有二維碼的海報

//2. 在生成的二维码中加上logo(生成图片文件) 
function scerweima1($url=&#39;&#39;){ 
require_once &#39;phpqrcode.php&#39;; 
$value = $url; //二维码内容 
$errorCorrectionLevel = &#39;H&#39;; //容错级别 
$matrixPointSize = 6; //生成图片大小 
//生成二维码图片 
$filename = &#39;qrcode/&#39;.microtime().&#39;.png&#39;; 
QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2); 
$logo = &#39;qrcode/logo.jpg&#39;; //准备好的logo图片 
$QR = $filename; //已经生成的原始二维码图 
if (file_exists($logo)) { 
$QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。 
$logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。 
$QR_width = imagesx($QR); //二维码图片宽度 
$QR_height = imagesy($QR); //二维码图片高度 
$logo_width = imagesx($logo); //logo图片宽度 
$logo_height = imagesy($logo); //logo图片高度 
$logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5) 
$scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度) 
$logo_qr_height = $logo_height/$scale; //组合之后logo的高度 
$from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点 
//重新组合图片并调整大小 
/*
imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中 
*/ 
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height); 
} 
//输出图片 
imagepng($QR, &#39;qrcode.png&#39;); 
imagedestroy($QR); 
imagedestroy($logo); 
return &#39;<img src="qrcode.png" alt="使用微信扫描支付">&#39;; 
} 
//调用查看结果 
echo scerweima1(&#39;https://www.baidu.com&#39;);

使用範例二:產生帶有圖像,暱稱和二維碼的海報

$config = array(
&#39;text&#39;=>array(
array(
&#39;text&#39;=>&#39;昵称&#39;,
&#39;left&#39;=>182,
&#39;top&#39;=>105,
&#39;fontPath&#39;=>&#39;qrcode/simhei.ttf&#39;, //字体文件
&#39;fontSize&#39;=>18, //字号
&#39;fontColor&#39;=>&#39;255,0,0&#39;, //字体颜色
&#39;angle&#39;=>0,
)
),
&#39;image&#39;=>array(
array(
&#39;url&#39;=>&#39;qrcode/qrcode.png&#39;, //图片资源路径
&#39;left&#39;=>130,
&#39;top&#39;=>-140,
&#39;stream&#39;=>0, //图片资源是否是字符串图像流
&#39;right&#39;=>0,
&#39;bottom&#39;=>0,
&#39;width&#39;=>150,
&#39;height&#39;=>150,
&#39;opacity&#39;=>100
),
array(
&#39;url&#39;=>&#39;https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofD96opK97RXwM179G9IJytIgqXod8jH9icFf6Cia6sJ0fxeILLMLf0dVviaF3SnibxtrFaVO3c8Ria2w/0&#39;,
&#39;left&#39;=>120,
&#39;top&#39;=>70,
&#39;right&#39;=>0,
&#39;stream&#39;=>0,
&#39;bottom&#39;=>0,
&#39;width&#39;=>55,
&#39;height&#39;=>55,
&#39;opacity&#39;=>100
),
),
&#39;background&#39;=>&#39;qrcode/bjim.jpg&#39;,
);
$filename = &#39;qrcode/&#39;.time().&#39;.jpg&#39;;
//echo createPoster($config,$filename);
echo createPoster($config);

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

原生php實作excel檔案讀寫步驟詳解

#php receivemail做出收發郵件功能

以上是PHP生成推廣海報步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn