>백엔드 개발 >PHP 튜토리얼 >PHP로 홍보 포스터를 생성하는 방법

PHP로 홍보 포스터를 생성하는 방법

不言
不言원래의
2018-04-18 14:34:581708검색

이 글은 주로 PHP로 홍보 포스터를 생성하는 방법을 소개하고, 구체적인 예시를 바탕으로 PHP 이미지 생성에 관련된 운영 기법과 관련 주의사항을 자세히 분석합니다. 도움이 필요한 친구들은 참고할 수 있습니다

이 글의 예시는 PHP 포스터 접근 방식으로 프로모션 생성 구현. 참고용으로 공유합니다. 세부 사항은 다음과 같습니다.

사용자 추천 관계를 결정하기 위해 특정 QR 코드가 포함된 홍보 포스터를 생성하고 다른 사람들과 공유해야 하는 경우가 종종 있습니다.

잘 분석해 보면 포스터 홍보에 필요한 요소는 포스터 배경 이미지와 QR 코드인데, 둘 다 생성하기 쉽지만 쉽게 공유할 수 있도록 하나의 2D 이미지로 결합하고 로컬에 저장할 수 있어야 합니다. 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 코드가 포함된 포스터

$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으로 문의하세요.