ホームページ > バックエンド開発 > PHPチュートリアル > PHP を使用してプロモーション ポスターを作成する方法

PHP を使用してプロモーション ポスターを作成する方法

不言
リリース: 2023-03-31 20:34:01
オリジナル
1783 人が閲覧しました

この記事では主に PHP でプロモーションポスターを生成する方法を紹介し、具体的な例に基づいて PHP 画像生成に関連する操作テクニックと関連する注意事項を詳細に分析します。必要な友人はこの記事の例を参照してください。

PHP でプロモーション ポスターを生成する方法について説明します。参照用に全員と共有します。詳細は次のとおりです。

ユーザーの推奨関係を判断するために、指定された QR コードを含むプロモーション ポスターを生成し、他のユーザーと共有する必要があることがよくあります。

注意深く分析すると、ポスターの宣伝に必要な要素はポスターの背景画像と QR コードです。どちらも生成は簡単ですが、保存できる 2 次元画像に結合する必要があります。ローカルで共有するのは簡単ですが、H5 ではキャンバスを使用して描画してスクリーンショットと同様の機能を完成させることができますが、それを小さなプログラムに組み込むには多くの制限があります。次に、ポスターをバックグラウンドで直接生成し、フロントデスクで直接呼び出します。

事前準備:

1. ポスターの背景画像は通常、サーバーに保存され、プログラムによってローカルに読み込まれます。 ##2. プロモーション QR コードは、QR コード画像リンクまたは文字列画像ストリームにすることができます。詳細については、「phpqrcode を使用して QR コードを生成する」を参照してください。


方法は次のとおりです。

/**
 * 生成宣传海报
 * @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);
  }
}
ログイン後にコピー

使用例 1:

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);
ログイン後にコピー

##使用例2:

画像、ニックネーム、QRを含むQRコードを生成code Poster

$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 中国語 Web サイトにご注意ください。

関連する推奨事項:

php による学生管理システムの実装

PHP を使用した zip パッケージ化とダウンロードの機能の実装

以上がPHP を使用してプロモーション ポスターを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート