> 백엔드 개발 > PHP 튜토리얼 > PHP로 홍보 포스터를 생성하는 단계에 대한 자세한 설명

PHP로 홍보 포스터를 생성하는 단계에 대한 자세한 설명

php中世界最好的语言
풀어 주다: 2023-03-26 06:04:01
원래의
1493명이 탐색했습니다.

이번에는 PHP로 프로모션 포스터를 생성하는 단계에 대해 자세히 설명하겠습니다. PHP로 프로모션 포스터를 생성할 때 주의사항은 무엇인가요? 아래는 실제 사례를 살펴보겠습니다.

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

잘 분석해 보면 포스터 홍보에 필요한 요소는 포스터 배경 이미지와 QR 코드인데, 둘 다 생성하기 쉽지만 쉽게 공유할 수 있도록 하나의 2D 이미지로 결합하고 로컬에 저장할 수 있어야 합니다. H5에서는 캔버스를 이용하여 그림을 그릴 수 있어 스크린샷과 유사한 기능을 완성할 수 있지만 작은 프로그램에 담기에는 한계가 많습니다. 그런 다음 백그라운드에서 직접 포스터를 생성하고 프런트 데스크에서 직접 호출합니다.

사전 준비 :

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[&#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);
}
}
로그인 후 복사

사용예 One : QR코드로 포스터 생성

//2. 在生成的二维码中加上logo(生成图片文件) 
function scerweima1($url=&#39;&#39;){ 
require_once &#39;phpqrcode.php&#39;; 
$value = $url; //二维码内容 
$errorCorrectionLevel = &#39;H&#39;; //容错级别 
$matrixPointSize = 6; //生成图片大小 
//生成二维码图片 
$filename = &#39;qrcode/&#39;.microtime().&#39;.png&#39;; 
QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2); 
$logo = &#39;qrcode/logo.jpg&#39;; //准备好的logo图片 
$QR = $filename; //已经生成的原始二维码图 
if (file_exists($logo)) { 
$QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。 
$logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。 
$QR_width = imagesx($QR); //二维码图片宽度 
$QR_height = imagesy($QR); //二维码图片高度 
$logo_width = imagesx($logo); //logo图片宽度 
$logo_height = imagesy($logo); //logo图片高度 
$logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5) 
$scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度) 
$logo_qr_height = $logo_height/$scale; //组合之后logo的高度 
$from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点 
//重新组合图片并调整大小 
/*
imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中 
*/ 
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height); 
} 
//输出图片 
imagepng($QR, &#39;qrcode.png&#39;); 
imagedestroy($QR); 
imagedestroy($logo); 
return &#39;<img src="qrcode.png" alt="使用微信扫描支付">&#39;; 
} 
//调用查看结果 
echo scerweima1(&#39;https://www.baidu.com&#39;);
로그인 후 복사

사용예 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에서 Excel 파일을 읽고 쓰는 단계에 대한 자세한 설명

php+receivemail을 사용하여 이메일을 보내고 받도록

위 내용은 PHP로 홍보 포스터를 생성하는 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿