当前位置:网站首页>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);边栏推荐
- C object storage
- leetcode 10. Regular expression matching regular expression matching (difficult)
- 多人合作项目查看每个人写了多少行代码
- Operational research 68 | the latest impact factors in 2022 were officially released. Changes in journals in the field of rapid care
- [server data recovery] a case of RAID5 data recovery stored in a brand of server
- Go array and slice
- Programmer growth Chapter 8: do a good job of testing
- 【云资源】云资源安全管理用什么软件好?为什么?
- What are the private addresses
- Write API documents first or code first?
猜你喜欢
随机推荐
MySQL - database query - sort query, paging query
The "Baidu Cup" CTF competition was held in February 2017, Web: explosion-2
Parsing XML using Dom4j
js判断数组中是否存在某个元素(四种方法)
asp.net 读取txt文件
go 字符串操作
Jasypt configuration file encryption | quick start | actual combat
这18个网站能让你的页面背景炫酷起来
那些考研后才知道的事
Redis6 transaction and locking mechanism
山东大学暑期实训一20220620
Redis6 master-slave replication and clustering
通讯录(链表实现)
MySQL --- 数据库查询 - 排序查询、分页查询
53. Maximum subarray sum: give you an integer array num, please find a continuous subarray with the maximum sum (the subarray contains at least one element) and return its maximum sum.
【公开课预告】:视频质量评价基础与实践
法国学者:最优传输理论下对抗攻击可解释性探讨
go 数组与切片
These 18 websites can make your page background cool
Intranet penetration tool NetApp








