php GD库生成分享海报
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php GD库生成分享海报相关的知识,希望对你有一定的参考价值。
php生成图像,效果如图
代码如下
<?php
/**
* 图片处理
* @author Administrator
*
*/
class ImgGD{
/**
* 创建分享图片
*/
public function createShareImg(){
// 1 获取背景图尺寸
list($bg_w,$bg_h) = getimagesize("../img/bg.jpg");
// 2 创建画图
$img = @imagecreatetruecolor($bg_w,$bg_h);
// 3 填充画布背景颜色
$img_bg_color = imagecolorallocate($img,255,255,255);
imagefill($img,0,0,$img_bg_color);
// 4 将背景图填充到画布
$bg_img = $this->getImgReource("../img/bg.jpg");
imagecopyresized($img,$bg_img,0,0,0,0,$bg_w,$bg_h,$bg_w,$bg_h);
// 5 填空用户二维码
$qrcode = $this->getImgReource("../img/qrcode.png");
// 计算用户二维码所在x轴位置
list($qr_w,$qr_h) = getimagesize("../img/qrcode.png");
$qrcode_des_x = ceil(($bg_w - $qr_w)/2);
imagecopyresized($img,$qrcode,$qrcode_des_x,513,0,0,$qr_w,$qr_h,$qr_w,$qr_h);
// 6 填充用户信息
$user_img_path = $this->thumbImg("../img/logo.png");
$user_img = $this->getImgReource($user_img_path);
list($user_w,$user_h) = getimagesize($user_img_path);
imagecopyresized($img,$user_img,13,20,0,0,$user_w,$user_h,$user_w,$user_h);
// 填空用户名
$user_name = "王小明";
$font_color = ImageColorAllocate($img,253,254,255); //字体颜色
$font_ttf = "../ziti/HYTangMeiRenJ-2.ttf";
imagettftext($img,23,0,90,50,$font_color,$font_ttf,$user_name);
// 7 设置提示语
$tip_text = "邀请你立即关注";
imagettftext($img,17,0,90,80,$font_color,$font_ttf,$tip_text);
// 8 输出图片
header("Content-type: image/png");
imagepng($img);
// 9 释放空间
imagedestroy($img);
imagedestroy($bg_img);
imagedestroy($qrcode);
imagedestory($user_img);
}
/**
* 获取图像文件资源
* @param string $file
* @return resource
*/
protected function getImgReource($file){
$file_ext = pathinfo($file,PATHINFO_EXTENSION);
switch ($file_ext){
case ‘jpg‘:
case ‘jpeg‘:
$img_reources = @imagecreatefromjpeg($file);
break;
case ‘png‘:
$img_reources = @imagecreatefrompng($file);
break;
case ‘gif‘:
$img_reources = @imagecreatefromgif($file);
break;
}
return $img_reources;
}
/**
* 缩放图片
* @param string $img
* @param string $file
* @param number $th_w
* @param number $th_h
* @return boolean|string;
*/
protected function thumbImg($img,$file=‘./‘,$th_w=62,$th_h=62){
//给图像加大1像素的边框
$new_th_h = $th_h + 4;
$new_th_w = $th_w + 4;
// 获取大图资源及图像大小
list($max_w,$max_h) = getimagesize($img);
if($max_w < $th_w || $max_h < $th_h) return false;
$max_img = $this->getImgReource($img);
//新建真色彩画布
$min_img = @imagecreatetruecolor($new_th_w,$new_th_h);
$bg_color = ImageColorAllocate($min_img,255,255,255);
imagefill($min_img,0,0,$bg_color);
// imagesavealpha($min_img,true);
imagecolortransparent($min_img,$bg_color);
imagecopyresampled($min_img,$max_img,2,2,0,0,$th_w,$th_h,$max_w,$max_h);
//输出图像到文件
$min_img_path = $file . ‘thunm_‘.time().‘.png‘;
imagepng($min_img,$min_img_path);
if(!is_file($min_img_path)){
return false;
}
//释放空间
imagedestroy($max_img);
imagedestroy($min_img);
return $min_img_path;
}
}
//调用
$gd_img = new ImgGD();
$gd_img->createShareImg();
使用到的函数:
使用到的GD函数:
getimagesize():该函数获取图像大小
imagecreatetruecolor() : 创建真色彩图像? ?imagecolorallocate():使用这个函数创建的图像画布图片会丢失色彩?
?imagecolorallocate() : 该函数用来设置颜色
imagecopyresized() : 拷贝图像调整图像大小
imagettftext() : 设置文本到图像上
imagepng() : 输出图像为png格式??imagejpeg() : 输出为jpg格式??imagegif() : 输出为gif格式
如果直接输出图像要添加一句代码: header("Content-type: image/png");
imagedestroy() : 该函数销毁图像释放内存空间资源
imagecreatefromjpeg() : 该函数获取jpg格式图像对应的图像资源
imagecreatefrompng() :?该函数获取png格式图像对应的图像资源
imagecreatefromgif() :?该函数获取gif格式图像对应的图像资源
具体函数的使用可以参考php手册
以上是关于php GD库生成分享海报的主要内容,如果未能解决你的问题,请参考以下文章