PHP生成二维码宣传分销海报(图文混编)

  •   
  • 6429
  • PHP
  • 0
  • super_dodo
  • 2019/07/03

最近需要做一个微信的分销的推广的二维码的海报(也可以是促销的时候海报),分销的时候,每个人都会生成自己的推广海报,这样就需要一个生成的方法来配合现在的需求。

下面是一个网上比较通用的案例,直接可以使用,注意你的字体权限和位置。
php_poster

/**
* 生成宣传海报
* @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,						//字号
		'fontPath' => './img/STKAITI.TTF',		//字体文件
		'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&#91;'left'&#93;) - $val&#91;'width'&#93;:$val&#91;'left'&#93;;
			$val&#91;'top'&#93; = $val&#91;'top'&#93;<0?$backgroundHeight- abs($val&#91;'top'&#93;) - $val&#91;'height'&#93;:$val&#91;'top'&#93;;
			//放置图像
			imagecopymerge($imageRes,$canvas, $val&#91;'left'&#93;,$val&#91;'top'&#93;,$val&#91;'right'&#93;,$val&#91;'bottom'&#93;,$val&#91;'width'&#93;,$val&#91;'height'&#93;,$val&#91;'opacity'&#93;);//左,上,右,下,宽度,高度,透明度
		}
	}

	//处理文字
	if(!empty($config&#91;'text'&#93;)){
		foreach ($config&#91;'text'&#93; 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&#91;'left'&#93;):$val&#91;'left'&#93;;
			$val&#91;'top'&#93; = $val&#91;'top'&#93;<0?$backgroundHeight- abs($val&#91;'top'&#93;):$val&#91;'top'&#93;;
			imagettftext($imageRes,$val&#91;'fontSize'&#93;,$val&#91;'angle'&#93;,$val&#91;'left'&#93;,$val&#91;'top'&#93;,$fontColor,realpath($val&#91;'fontPath'&#93;),$val&#91;'text'&#93;);
		}
	}

	//生成图片
	if(!empty($filename)){
		$res = imagejpeg($imageRes,$filename,90); //保存到本地
		imagedestroy($imageRes);
		if(!$res) return false;
		return $filename;
	}else{
		imagejpeg($imageRes);     //在浏览器上显示
		imagedestroy($imageRes);
	}
}

&#91;/php&#93;


使用示例一:生成带有二维码的海报
&#91;php&#93;
$config = array(
	'image' => array(
		array(
			'url' => './img/qrcode.png',     //二维码资源
			'stream' => 0,
			'left' => 116,
			'top' => -216,
			'right' => 0,
			'bottom' => 0,
			'width' => 178,
			'height' => 178,
			'opacity' => 100
		)
	),
	'background' => './img/bg.png'          //背景图
);
$filename = 'bg/'.time().'.png';
//echo createPoster($config,$filename);
echo createPoster($config);

使用示例二:生成带有图像,昵称和二维码的海报

$config = array(
	'text' => array(
		array(
			'text' => '湖人总冠军',
			'left' => 150,
			'top' => 100,
			'fontPath' => './img/STKAITI.TTF',		//字体文件
			'fontSize' => 28,             			//字号
			'fontColor' => '255,0,0',				//字体颜色
			'angle' => 0,
		),
		array(
			'text' => 'PHP是世界上最好的语言',
			'left' => 50,
			'top' => 400,
			'fontPath' => './img/STKAITI.TTF',		//字体文件
			'fontSize' => 28,						//字号
			'fontColor' => '76,175,80',				//字体颜色
			'angle' => 0,
		),
	),
	'image' => array(
		array(
			'url' => './img/qrcode.png',			//图片资源路径
			'left' => 150,
			'top' => 150,
			'stream' => 0,							//图片资源是否是字符串图像流
			'right' => 0,
			'bottom' => 0,
			'width' => 200,
			'height' => 200,
			'opacity' => 100
		),
		array(
		//  'url' => 'https://wx.qlogo.cn/mmopen/vi_32/user_avator_url',
			'url' => './img/logo.png',
			'left' => 225,
			'top' => 225,
			'right' => 0,
			'stream' => 0,
			'bottom' => 0,
			'width' => 55,
			'height' => 55,
			'opacity' => 100
		),
	),
	'background' => './img/bg.png',
);

#生成的图片存放的地址
$filename = './img/'.time().'.png';

//直接生成图片&&保存
//echo createPoster($config,$filename);

//输出图像
echo createPoster($config);

bg_ok
参考网址:
https://www.jb51.net/article/136425.htm
https://www.jb51.net/article/136418.htm
https://www.cnblogs.com/xuweiqiang/p/9956498.html