PHP gd库 生成海报
<?php
/**
* 生成图片
* @Author LinPengFei
* @DateTime 2018-04-18T18:03:21+0800
* @param string $title [标题]
* @param string $summary [简介]
* @param string $codeUrl [二维码地址]
* @param string $imageUrl [底部图片地址]
* @param integer $width [图片宽度]
* @param string $ttf [字体文件]
* @return [type] [description]
*/
function image($title='',$summary='',$codeUrl='',$imageUrl='',$width = 1080,$ttf = 'simhei.ttf')
{
$height = $width*1.6;//高
$padd = $width/25;//边距
$title_size = $width/17;//标题大小
$summary_size = $width/25;//简介大小
$line = $width/25;//行间距
$code_width = $width/3; //二维码宽度
$image_width = $width-2*$padd;//底部图片宽度
$canvas = imageCreatetruecolor($width, $height);//新建画布
$color = imagecolorallocate($canvas, 255, 255, 255);//背景白色
imagefill($canvas, 0, 0, $color);
$black = imagecolorallocate($canvas,0,0,0);//标题黑色画笔
$gray = imagecolorallocate($canvas,192,192,192);//时间灰色画笔
$dark_gray = imagecolorallocate($canvas,88,87,86);//简介深灰色画笔
//标题两行
$title_len = mb_strlen($title,'utf-8');//标题长度
$title_line = floor((($width-2*$padd)/$title_size));//每行字数
if ($title_len <= $title_line) {
$line_one = $title;
$line_second = '';
}
if ($title_len > $title_line && $title_len <= 2*$title_line) {
$line_one = mb_substr($title,0,$title_line);
$line_second = mb_substr($title,$title_line);
}
if ($title_len > 2*$title_line) {
$line_one = mb_substr($title,0,$title_line);
$line_second = mb_substr($title,$title_line,$title_line-2).'...';
}
imagettftext($canvas,$title_size/1.33,0,$padd,$padd+$title_size,$black,$ttf,$line_one ); //第一行
imagettftext($canvas,$title_size/1.33,0,$padd,$padd+2*$title_size+$line,$black,$ttf,$line_second ); //第二行
//时间
imagettftext ( $canvas , $summary_size/1.33, 0 , $padd , $padd+2*$title_size+2*$line+$summary_size, $gray , $ttf , date('Y-m-d H:i:s'));
//简介三行 默认大于三行
$summary_line = floor((($width-2*$padd)/$summary_size));//每行字数
$line_one = mb_substr($summary,0,$summary_line);
$line_second = mb_substr($summary,$summary_line,$summary_line);
$line_third = mb_substr($summary,2*$summary_line,$summary_line-2).'...';
imagettftext ( $canvas , $summary_size/1.33, 0, $padd , $padd+2*$title_size+3*$line+2*$summary_size , $dark_gray , $ttf , $line_one ); //第一行
imagettftext ( $canvas , $summary_size/1.33, 0, $padd , $padd+2*$title_size+4*$line+3*$summary_size, $dark_gray , $ttf , $line_second ); //第二行
imagettftext ( $canvas , $summary_size/1.33, 0, $padd , $padd+2*$title_size+5*$line+4*$summary_size, $dark_gray , $ttf , $line_third ); //第三行
//二维码
imagettftext ( $canvas , $title_size/1.33, 0, $padd , $padd+5*$title_size+6*$line+4*$summary_size, $black , $ttf , '长按扫码阅读');
$suffix = end(explode('.', $codeUrl));
if ($suffix == 'jpg' || $suffix == 'jpeg') $code = imagecreatefromjpeg($codeUrl);
if ($suffix == 'png') $code = imagecreatefrompng($codeUrl);
if ($suffix == 'gif') $code = imagecreatefromgif($codeUrl);
if ($suffix == 'bmp') $code = imagecreatefrombmp($codeUrl);
$code_oldW = imagesx($code);
$code_oldH = imagesy($code);
$percent1 = $code_oldH/$code_oldW;//长宽比例
imagecopyresampled( $canvas , $code , $width-$padd-$code_width , $padd+2*$title_size+6*$line+4*$summary_size , 0 , 0 , $code_width , $code_width*$percent1 , $code_oldW , $code_oldH);
//底部图片
$suffix = end(explode('.', $imageUrl));
if ($suffix == 'jpg' || $suffix == 'jpeg') $image = imagecreatefromjpeg($imageUrl);
if ($suffix == 'png') $image = imagecreatefrompng($imageUrl);
if ($suffix == 'gif') $image = imagecreatefromgif($imageUrl);
if ($suffix == 'bmp') $image = imagecreatefrombmp($imageUrl);
$image_oldW = imagesx($image);
$image_oldH = imagesy($image);
//长宽比例
$percent2 = $image_oldH/$image_oldW;
imagecopyresampled( $canvas , $image , $padd , $padd+2*$title_size+7*$line+4*$summary_size+$code_width*$percent1 , 0 , 0 , $image_width , $image_width*$percent2 , $image_oldW , $image_oldH);
//输出到浏览器
//header("content-type:image/png");
$filename = mb_substr($title,0,5).'.jpg';
if (!file_exists($filename)) {
imagejpeg($canvas, $filename);
imagedestroy($canvas);
} else {
imagedestroy($canvas);
}
}
/**
* 生成图片
* @Author LinPengFei
* @DateTime 2018-04-18T18:03:21+0800
* @param string $title [标题]
* @param string $summary [简介]
* @param string $codeUrl [二维码地址]
* @param string $imageUrl [底部图片地址]
* @param integer $width [图片宽度]
* @param string $ttf [字体文件]
* @return [type] [description]
*/
function image($title='',$summary='',$codeUrl='',$imageUrl='',$width = 1080,$ttf = 'simhei.ttf')
{
$height = $width*1.6;//高
$padd = $width/25;//边距
$title_size = $width/17;//标题大小
$summary_size = $width/25;//简介大小
$line = $width/25;//行间距
$code_width = $width/3; //二维码宽度
$image_width = $width-2*$padd;//底部图片宽度
$canvas = imageCreatetruecolor($width, $height);//新建画布
$color = imagecolorallocate($canvas, 255, 255, 255);//背景白色
imagefill($canvas, 0, 0, $color);
$black = imagecolorallocate($canvas,0,0,0);//标题黑色画笔
$gray = imagecolorallocate($canvas,192,192,192);//时间灰色画笔
$dark_gray = imagecolorallocate($canvas,88,87,86);//简介深灰色画笔
//标题两行
$title_len = mb_strlen($title,'utf-8');//标题长度
$title_line = floor((($width-2*$padd)/$title_size));//每行字数
if ($title_len <= $title_line) {
$line_one = $title;
$line_second = '';
}
if ($title_len > $title_line && $title_len <= 2*$title_line) {
$line_one = mb_substr($title,0,$title_line);
$line_second = mb_substr($title,$title_line);
}
if ($title_len > 2*$title_line) {
$line_one = mb_substr($title,0,$title_line);
$line_second = mb_substr($title,$title_line,$title_line-2).'...';
}
imagettftext($canvas,$title_size/1.33,0,$padd,$padd+$title_size,$black,$ttf,$line_one ); //第一行
imagettftext($canvas,$title_size/1.33,0,$padd,$padd+2*$title_size+$line,$black,$ttf,$line_second ); //第二行
//时间
imagettftext ( $canvas , $summary_size/1.33, 0 , $padd , $padd+2*$title_size+2*$line+$summary_size, $gray , $ttf , date('Y-m-d H:i:s'));
//简介三行 默认大于三行
$summary_line = floor((($width-2*$padd)/$summary_size));//每行字数
$line_one = mb_substr($summary,0,$summary_line);
$line_second = mb_substr($summary,$summary_line,$summary_line);
$line_third = mb_substr($summary,2*$summary_line,$summary_line-2).'...';
imagettftext ( $canvas , $summary_size/1.33, 0, $padd , $padd+2*$title_size+3*$line+2*$summary_size , $dark_gray , $ttf , $line_one ); //第一行
imagettftext ( $canvas , $summary_size/1.33, 0, $padd , $padd+2*$title_size+4*$line+3*$summary_size, $dark_gray , $ttf , $line_second ); //第二行
imagettftext ( $canvas , $summary_size/1.33, 0, $padd , $padd+2*$title_size+5*$line+4*$summary_size, $dark_gray , $ttf , $line_third ); //第三行
//二维码
imagettftext ( $canvas , $title_size/1.33, 0, $padd , $padd+5*$title_size+6*$line+4*$summary_size, $black , $ttf , '长按扫码阅读');
$suffix = end(explode('.', $codeUrl));
if ($suffix == 'jpg' || $suffix == 'jpeg') $code = imagecreatefromjpeg($codeUrl);
if ($suffix == 'png') $code = imagecreatefrompng($codeUrl);
if ($suffix == 'gif') $code = imagecreatefromgif($codeUrl);
if ($suffix == 'bmp') $code = imagecreatefrombmp($codeUrl);
$code_oldW = imagesx($code);
$code_oldH = imagesy($code);
$percent1 = $code_oldH/$code_oldW;//长宽比例
imagecopyresampled( $canvas , $code , $width-$padd-$code_width , $padd+2*$title_size+6*$line+4*$summary_size , 0 , 0 , $code_width , $code_width*$percent1 , $code_oldW , $code_oldH);
//底部图片
$suffix = end(explode('.', $imageUrl));
if ($suffix == 'jpg' || $suffix == 'jpeg') $image = imagecreatefromjpeg($imageUrl);
if ($suffix == 'png') $image = imagecreatefrompng($imageUrl);
if ($suffix == 'gif') $image = imagecreatefromgif($imageUrl);
if ($suffix == 'bmp') $image = imagecreatefrombmp($imageUrl);
$image_oldW = imagesx($image);
$image_oldH = imagesy($image);
//长宽比例
$percent2 = $image_oldH/$image_oldW;
imagecopyresampled( $canvas , $image , $padd , $padd+2*$title_size+7*$line+4*$summary_size+$code_width*$percent1 , 0 , 0 , $image_width , $image_width*$percent2 , $image_oldW , $image_oldH);
//输出到浏览器
//header("content-type:image/png");
//imagejpeg($canvas);
//保存图片,销毁图形,释放内存$filename = mb_substr($title,0,5).'.jpg';
if (!file_exists($filename)) {
imagejpeg($canvas, $filename);
imagedestroy($canvas);
} else {
imagedestroy($canvas);
}
}
image('这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题','这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介这是简介',$codeUrl='code.jpg',$imageUrl='image.jpg');
运行效果: