PHP產生推廣海報的方法

來源:互聯網
上載者:User
本文主要和大家介紹了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['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];      $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];      //放置映像      imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,寬度,高度,透明度    }  }  //處理文字  if(!empty($config['text'])){    foreach ($config['text'] as $key => $val) {      $val = array_merge($textDefault,$val);      list($R,$G,$B) = explode(',', $val['fontColor']);      $fontColor = imagecolorallocate($imageRes, $R, $G, $B);      $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];      $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']):$val['top'];      imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);    }  }  //產生圖片  if(!empty($filename)){    $res = imagejpeg ($imageRes,$filename,90); //儲存到本地    imagedestroy($imageRes);    if(!$res) return false;    return $filename;  }else{    imagejpeg ($imageRes);     //在瀏覽器上顯示    imagedestroy($imageRes);  }}

使用樣本一:產生帶有二維碼的海報


$config = array(  'image'=>array(    array(      'url'=>'qrcode/qrcode.png',     //二維碼資源      'stream'=>0,      'left'=>116,      'top'=>-216,      'right'=>0,      'bottom'=>0,      'width'=>178,      'height'=>178,      'opacity'=>100    )  ),  'background'=>'bg/bg1.jpg'          //背景圖);$filename = 'bg/'.time().'.jpg';//echo createPoster($config,$filename);echo createPoster($config);

使用樣本二:產生帶有映像,暱稱和二維碼的海報


$config = array(  'text'=>array(    array(      'text'=>'暱稱',      'left'=>182,      'top'=>105,      'fontPath'=>'qrcode/simhei.ttf',     //字型檔      'fontSize'=>18,             //字型大小      'fontColor'=>'255,0,0',       //字型顏色      'angle'=>0,    )  ),  'image'=>array(    array(      'url'=>'qrcode/qrcode.png',       //圖片資源路徑      'left'=>130,      'top'=>-140,      'stream'=>0,             //圖片資源是否是字串映像流      'right'=>0,      'bottom'=>0,      'width'=>150,      'height'=>150,      'opacity'=>100    ),    array(      'url'=>'https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofD96opK97RXwM179G9IJytIgqXod8jH9icFf6Cia6sJ0fxeILLMLf0dVviaF3SnibxtrFaVO3c8Ria2w/0',      'left'=>120,      'top'=>70,      'right'=>0,      'stream'=>0,      'bottom'=>0,      'width'=>55,      'height'=>55,      'opacity'=>100    ),  ),  'background'=>'qrcode/bjim.jpg',);$filename = 'qrcode/'.time().'.jpg';//echo createPoster($config,$filename);echo createPoster($config);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.