首頁  >  文章  >  後端開發  >  PHP實作產生推廣海報的方法

PHP實作產生推廣海報的方法

不言
不言原創
2018-04-18 14:34:581614瀏覽

這篇文章主要介紹了PHP實作產生推廣海報的方法,結合具體實例形式詳細分析了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);
  }
}

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

$config = array(
  &#39;image&#39;=>array(
    array(
      &#39;url&#39;=>&#39;qrcode/qrcode.png&#39;,     //二维码资源
      &#39;stream&#39;=>0,
      &#39;left&#39;=>116,
      &#39;top&#39;=>-216,
      &#39;right&#39;=>0,
      &#39;bottom&#39;=>0,
      &#39;width&#39;=>178,
      &#39;height&#39;=>178,
      &#39;opacity&#39;=>100
    )
  ),
  &#39;background&#39;=>&#39;bg/bg1.jpg&#39;          //背景图
);
$filename = &#39;bg/&#39;.time().&#39;.jpg&#39;;
//echo createPoster($config,$filename);
echo createPoster($config);

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

$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實作驗證碼類別

以上是PHP實作產生推廣海報的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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