当前位置:网站首页>PHP generate Poster
PHP generate Poster
2022-07-05 13:42:00 【Black hearted green rose】
One 、 Method
**
* Generate posters
* @param array Parameters , Including pictures and words
* @param string $filename Generate poster file name , If this parameter is not passed, no file will be generated , Direct output picture
* @return [type] [description]
*/
function createPoster($config=array(),$filename=""){
// If there's anything wrong with reading the newspaper , You can note this first 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, // Font size
'fontColor'=>'255,255,255', // The font color
'angle'=>0,
);
$background = $config['background'];// The bottom background of the poster
// Background method
$backgroundInfo = getimagesize($background);
$backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
$background = $backgroundFun($background);
$backgroundWidth = imagesx($background); // Background width
$backgroundHeight = imagesy($background); // Background height
$imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
$color = imagecolorallocate($imageRes, 0, 0, 0);
imagefill($imageRes, 0, 0, $color);
// imageColorTransparent($imageRes, $color); // The color is transparent
imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
// Processed pictures
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']){ // If it is a string image stream
$info = getimagesizefromstring($val['url']);
$function = 'imagecreatefromstring';
}
$res = $function($val['url']);
$resWidth = $info[0];
$resHeight = $info[1];
// Create Sketchpad , Zoom the picture to the specified size
$canvas=imagecreatetruecolor($val['width'], $val['height']);
imagefill($canvas, 0, 0, $color);
// The key function , Parameters ( Target resources , Source , The starting coordinate of the target resource x,y, The starting coordinate of the source resource x,y, The width and height of the target resource w,h, The width and height of the source resource w,h)
imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
$val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
$val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];
// Place image
imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);// Left , On , Right , Next , Width , Height , transparency
}
}
// Working with text
if(!empty($config['text'])){
foreach ($config['text'] 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['left']):$val['left'];
$val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']):$val['top'];
imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);
}
}
// Generate pictures
if(!empty($filename)){
$res = imagejpeg ($imageRes,$filename,90); // Save to local
imagedestroy($imageRes);
if(!$res) return false;
return $filename;
}else{
imagejpeg ($imageRes); // Show... On the browser
imagedestroy($imageRes);
}
}Two 、 Usage method
1. Generate a picture with QR code
$config = array(
'image'=>array(
array(
'url'=>'qrcode/qrcode.png', // QR code resources
'stream'=>0,
'left'=>116,
'top'=>-216,
'right'=>0,
'bottom'=>0,
'width'=>178,
'height'=>178,
'opacity'=>100
)
),
'background'=>'bg/bg1.jpg' // Background map
);
$filename = 'bg/'.time().'.jpg';
//echo createPoster($config,$filename);
echo createPoster($config);2. Generate multi content posters
$config = array(
'text'=>array(
array(
'text'=>' nickname ',
'left'=>182,
'top'=>105,
'fontPath'=>'qrcode/simhei.ttf', // The font file
'fontSize'=>18, // Font size
'fontColor'=>'255,0,0', // The font color
'angle'=>0,
)
),
'image'=>array(
array(
'url'=>'qrcode/qrcode.png', // Image resource path
'left'=>130,
'top'=>-140,
'stream'=>0, // Whether the picture resource is a string image stream
'right'=>0,
'bottom'=>0,
'width'=>150,
'height'=>150,
'opacity'=>100
),
array(
'url'=>'https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofD96opK97RXwM179G9IJytIgqXod8jH9icFf6Cia6sJ0fxeILLMLf0dVviaF3SnibxtrFaVO3c8Ria2w/0',
'left'=>120,
'top'=>70,
'right'=>0,
'stream'=>0,
'bottom'=>0,
'width'=>55,
'height'=>55,
'opacity'=>100
),
),
'background'=>'qrcode/bjim.jpg',
);
$filename = 'qrcode/'.time().'.jpg';
//echo createPoster($config,$filename);
echo createPoster($config);边栏推荐
- What about data leakage? " Watson k'7 moves to eliminate security threats
- Mmseg - Mutli view time series data inspection and visualization
- Parsing XML using Dom4j
- 那些考研后才知道的事
- jenkins安装
- redis6事务和锁机制
- MySQL get time
- Go string operation
- Idea设置方法注释和类注释
- The "Baidu Cup" CTF competition was held in February 2017, Web: explosion-2
猜你喜欢
![[深度学习论文笔记]使用多模态MR成像分割脑肿瘤的HNF-Netv2](/img/52/5e85743b1817de96a52e02b92fd08c.png)
[深度学习论文笔记]使用多模态MR成像分割脑肿瘤的HNF-Netv2

Can and can FD

运筹说 第68期|2022年最新影响因子正式发布 快看管科领域期刊的变化

Talk about seven ways to realize asynchronous programming

Solve the problem of invalid uni app configuration page and tabbar

华为推送服务内容,阅读笔记

The real king of caching, Google guava is just a brother

What are the private addresses

搭建一个仪式感点满的网站,并内网穿透发布到公网 2/2

【每日一题】1200. 最小绝对差
随机推荐
ETCD数据库源码分析——集群间网络层客户端peerRt
一文详解ASCII码,Unicode与utf-8
web3.eth. Filter related
TortoiseSVN使用情形、安装与使用
Zhubo Huangyu: it's really bad not to understand these gold frying skills
The "Baidu Cup" CTF competition was held in February 2017, Web: explosion-2
[server data recovery] a case of RAID5 data recovery stored in a brand of server
如何把大的‘tar‘存档文件分割成特定大小的多个文件
Win10——轻量级小工具
MySQL - database query - sort query, paging query
Don't know these four caching modes, dare you say you understand caching?
多人合作项目查看每个人写了多少行代码
RK3566添加LED
What about data leakage? " Watson k'7 moves to eliminate security threats
今年上半年,通信行业发生了哪些事?
Parsing XML using Dom4j
Log4j utilization correlation
FPGA 学习笔记:Vivado 2019.1 添加 IP MicroBlaze
Programmer growth Chapter 8: do a good job of testing
Prefix, infix, suffix expression "recommended collection"