Maison  >  Article  >  développement back-end  >  Comment générer des affiches promotionnelles avec PHP

Comment générer des affiches promotionnelles avec PHP

小云云
小云云original
2018-03-16 10:18:421588parcourir

Cet article présente principalement la méthode de génération d'affiches promotionnelles en PHP, et analyse en détail les techniques de fonctionnement pertinentes et les précautions associées pour la génération d'images PHP sur la base d'exemples spécifiques. Les amis qui en ont besoin pourront s'y référer. tout le monde.

Il est souvent nécessaire de générer une affiche promotionnelle, comprenant un code QR spécifié, et de la partager avec d'autres pour scanner le code afin de déterminer la relation de recommandation de l'utilisateur.

Analysez attentivement, les éléments nécessaires à la promotion des affiches sont les images d'arrière-plan de l'affiche et les codes QR. Les deux sont faciles à générer, mais ils doivent être combinés en une image bidimensionnelle et peuvent être enregistrés dans C'est le cas. facile à partager localement, mais c'est là la difficulté. Dans H5, vous pouvez utiliser Canvas pour dessiner pour remplir des fonctions similaires aux captures d'écran, mais il existe de nombreuses limitations à le mettre dans un petit programme. Ensuite, nous générons l’affiche directement en arrière-plan et l’appelons directement à la réception.

Préparation précoce :

1. Image de fond de l'affiche, l'image de fond est généralement stockée dans le serveur et lue localement par le programme 2. Promotion Le code QR peut être un lien d'image de code QR ou un flux d'image de chaîne. Si vous générez le code QR vous-même, voir pour plus de détails : Utilisez phpqrcode pour générer un code QR.

La méthode est la suivante :


/**
 * 生成宣传海报
 * @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);
  }
}

Exemple d'utilisation 1 : générer une affiche avec un code QR


$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);

Exemple d'utilisation 2 : générer avec une image, un pseudo et Affiches de code QR


$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);

Recommandations associées :

Utilisez php pour envoyer une affiche de code QR de personnalisation avec arrière-plan, avatar, texte et message WeChat avec invites


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn