当前位置:网站首页>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);
边栏推荐
- Write API documents first or code first?
- go map
- Usage, installation and use of TortoiseSVN
- Integer ==比较会自动拆箱 该变量不能赋值为空
- Internal JSON-RPC error. {"code":-32000, "message": "execution reverted"} solve the error
- Matlab paper chart standard format output (dry goods)
- French scholars: the explicability of counter attack under optimal transmission theory
- Mmseg - Mutli view time series data inspection and visualization
- Redis6 master-slave replication and clustering
- Redis6 transaction and locking mechanism
猜你喜欢
MySQL - database query - sort query, paging query
私有地址有那些
Can and can FD
Although the volume and price fall, why are the structural deposits of commercial banks favored by listed companies?
[public class preview]: basis and practice of video quality evaluation
[server data recovery] a case of RAID5 data recovery stored in a brand of server
[notes of in-depth study paper]transbtsv2: wider instead of deep transformer for medical image segmentation
Jasypt configuration file encryption | quick start | actual combat
[深度学习论文笔记]TransBTSV2: Wider Instead of Deeper Transformer for Medical Image Segmentation
FPGA 学习笔记:Vivado 2019.1 添加 IP MicroBlaze
随机推荐
[MySQL usage Script] catch all MySQL time and date types and related operation functions (3)
Android本地Sqlite数据库的备份和还原
49. 字母异位词分组:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
一网打尽异步神器CompletableFuture
如何把大的‘tar‘存档文件分割成特定大小的多个文件
MySQL --- 数据库查询 - 排序查询、分页查询
Flutter InkWell & Ink组件
redis6主从复制及集群
“百度杯”CTF比赛 九月场,Web:SQL
PostgreSQL Usage Summary (PIT)
Flutter draws animation effects of wave movement, curves and line graphs
Multi person cooperation project to see how many lines of code each person has written
【Hot100】34. Find the first and last positions of elements in a sorted array
今年上半年,通信行业发生了哪些事?
ETCD数据库源码分析——集群间网络层客户端peerRt
When using Tencent cloud for the first time, you can only use webshell connection instead of SSH connection.
南理工在线交流群
网络安全-HSRP协议
4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
The real king of caching, Google guava is just a brother