thinkphp框架 如何利用GD库在图片上编写文字(代码范例)
发布:smiling 来源: PHP粉丝网 添加日期:2020-03-30 22:38:45 浏览: 评论:0
本篇文章的主要内容是关于用GD库在图片上编写文字的代码范例,具有一定的参考价值,感兴趣的朋友可以学习了解一下,希望对你有帮助。
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- */
- namespace Home\Event;
- use \Think\Image;
- use \Think\Upload;
- class ImgEvent
- {
- private $THINK_IMAGE = null;
- private $THINK_UPLOAD = null;
- public function __construct()
- {
- $this->THINK_IMAGE = new Image();
- $this->THINK_UPLOAD = new Upload();
- }
- /*
- * 保存base64文件
- * $img string base64类型的文件
- * $type string 保存的文件类型
- * app_user_head_img 用户头像
- *
- *
- */
- public function saveImg_base64($img = null , $type = null)
- {
- //获取保存图片配置
- $imgConfig_savePath = C("img_save.save_path");
- $imgConfig_size = C("img_save.size");
- $saveFlag = false;
- // dump($imgConfig_savePath[$type]);
- // dump($imgConfig_size);
- if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img, $result) && $imgConfig_savePath[$type])
- {
- $img_ext = $result[2]; //图片后缀
- $img_header = $result[1];//图片头信息
- $new_file_name = date('Ymd').'/'.uniqid().'.'.$img_ext;
- $origin_img_path = '';//原图的保存路径
- $origin_img_save_flag = true;//
- foreach($imgConfig_savePath[$type] as $k => $v)
- {
- if(!is_dir($v.date('Ymd')))
- {
- mkdir($v.date('Ymd'),0777,true);
- }
- if ($k == 'origin')
- {
- //先保存一份原图,然后其他尺寸的保存直接调用原图路径origin_img_path.
- $origin_res = file_put_contents($v.$new_file_name, base64_decode(str_replace($img_header, '', $img)));
- if (!$origin_res)
- {
- $origin_img_save_flag = false;
- break;
- }
- else
- {
- $saveFlag = $new_file_name;
- $origin_img_path = $v.$new_file_name;
- $this->THINK_IMAGE->open($origin_img_path);
- }
- }
- else
- {
- if ($origin_img_save_flag)
- {
- $width = $imgConfig_size[$type][$k]['w'];
- $height = $imgConfig_size[$type][$k]['h'];
- $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$new_file_name);
- }
- }
- }
- }
- return $saveFlag;
- }
- /*
- * 保存file类型文件
- *
- */
- public function saveImg_file($img = null , $type = null)
- {
- //获取保存图片配置
- $imgConfig_savePath = C("img_save.save_path");
- $imgConfig_size = C("img_save.size");
- $saveFlag = false;
- if ($img && $imgConfig_savePath[$type])
- {
- $origin_img_save_flag = true;
- foreach($imgConfig_savePath[$type] as $k => $v)
- {
- if(!is_dir($v.date('Ymd')))
- {
- mkdir($v.date('Ymd'),0777,true);
- }
- if ($k == 'origin')
- {
- $this->THINK_UPLOAD->rootPath = $v;
- $this->THINK_UPLOAD->subName = date('Ymd');
- $this->THINK_UPLOAD->saveName = array('uniqid','');
- $saveRes = $this->THINK_UPLOAD->uploadOne($img);
- if (!$saveRes)
- {
- $origin_img_save_flag = false;
- }
- else
- {
- $saveFlag = true;
- $origin_img_path = $v.$saveRes['savepath'].$saveRes['savename'];
- $this->THINK_IMAGE->open($origin_img_path);
- $fileName = $saveRes['savepath'].$saveRes['savename'];
- }
- }
- else
- {
- if ($origin_img_save_flag)
- {
- $width = $imgConfig_size[$type][$k]['w'];
- $height = $imgConfig_size[$type][$k]['h'];
- $compress_img_path=$v.$fileName;
- $saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName);
- if (!$saveFlag)
- {
- $saveFlag = false;
- $origin_img_save_flag = false;
- }
- }
- }
- }
- if($saveFlag)
- {
- #$saveFlag = $fileName;
- $saveFlag = array('origin'=>get_current_Host().'/'.$origin_img_path,'compress'=>get_current_Host().'/'.$compress_img_path);
- }
- }
- return $saveFlag;
- }
- public function save_file($img = null , $type = null)
- {
- //获取保存图片配置
- $imgConfig_savePath = C("img_save.save_path");
- $saveFlag = false;
- if ($img && $imgConfig_savePath[$type]) {
- if (!is_dir($imgConfig_savePath[$type] . date('Ymd'))) {
- mkdir($imgConfig_savePath[$type] . date('Ymd'), 0777, true);
- }
- $this->THINK_UPLOAD->rootPath = $imgConfig_savePath[$type];
- $this->THINK_UPLOAD->subName = date('Ymd');
- $this->THINK_UPLOAD->saveName = array('uniqid', '');
- $saveRes = $this->THINK_UPLOAD->uploadOne($img);
- if ($saveRes) {
- $saveFlag = true;
- $origin_img_path = $imgConfig_savePath[$type] . $saveRes['savepath'] . $saveRes['savename'];
- //$fileName = $saveRes['savepath'] . $saveRes['savename'];
- }
- }
- if($saveFlag)
- {
- $saveFlag = $origin_img_path;
- return get_current_Host().'/'.$saveFlag;
- }else
- {
- return $saveFlag;
- }
- }
- /*
- * 保存file类型文件,多文件
- *
- */
- public function saveImgs_files($imgs = null , $type = null)
- {
- //获取保存图片配置s
- $imgConfig_savePath = C("img_save.save_path");
- $imgConfig_size = C("img_save.size");
- $saveFlag = false;
- $imgResArr = array();//保存图片路径
- $origin_img_path = array();//原图路径
- if ($imgs && $imgConfig_savePath[$type])
- {
- $origin_img_save_flag = true;
- foreach($imgConfig_savePath[$type] as $k => $v)
- {
- if(!is_dir($v.date('Ymd')))
- {
- mkdir($v.date('Ymd'),0777,true);
- }
- if ($k == 'origin')
- {
- $this->THINK_UPLOAD->rootPath = $v;
- $this->THINK_UPLOAD->subName = date('Ymd');
- $this->THINK_UPLOAD->saveName = array('uniqid','');
- $saveRes = $this->THINK_UPLOAD->upload($imgs);
- if ($saveRes)
- {
- $saveFlag = true;
- foreach ($saveRes as $srK => $srV)
- {
- $origin_img_path[] = $v.$saveRes[$srK]['savepath'].$saveRes[$srK]['savename'];
- $fileName = $saveRes[$srK]['savepath'].$saveRes[$srK]['savename'];
- $imgResArr[] = $fileName;
- }
- }
- }
- else
- {
- foreach($origin_img_path as $oipK => $oipV)
- {
- if ($saveFlag)
- {
- $width = $imgConfig_size[$type][$k]['w'];
- $height = $imgConfig_size[$type][$k]['h'];
- $this->THINK_IMAGE->open($oipV);
- $saveThumb = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$imgResArr[$oipK]);
- if (!$saveThumb)
- {
- $saveFlag = false;
- break;
- }
- }
- }
- }
- }
- if ($saveFlag)
- {
- $saveFlag = $imgResArr;
- }
- }
- return $saveFlag;
- }
- /*
- * 保存微信头像 - url
- *
- */
- public function save_WxImg($picUrl = '',$type = null)
- {
- $ch = curl_init($picUrl);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_NOBODY, 0); //对body进行输出。
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $package = curl_exec($ch);
- $httpInfo = curl_getinfo($ch);
- curl_close($ch);
- $media = array_merge(array('mediaBody' => $package), $httpInfo);
- //求出文件格式
- preg_match('/\w\/(\w+)/i', $media["content_type"], $extmatches);
- $fileExt = $extmatches[1];
- $saveName = md5(microtime(true)).".{$fileExt}";
- //获取保存图片配置
- $imgConfig_savePath = C("img_save.save_path");
- $imgConfig_size = C("img_save.size");
- $saveFlag = false;
- if ($imgConfig_savePath[$type])
- {
- $origin_img_save_flag = true;
- foreach($imgConfig_savePath[$type] as $k => $v)
- {
- if(!is_dir($v.date('Ymd')))
- {
- mkdir($v.date('Ymd'),0777,true);
- }
- if ($k == 'origin')
- {
- file_put_contents($v.'/'.date('Ymd').'/'.$saveName,$media['mediaBody']);
- $origin_img_path = $v.'/'.date('Ymd').'/'.$saveName;
- $this->THINK_IMAGE->open($origin_img_path);
- $fileName = date('Ymd').'/'.$saveName;
- }
- else
- {
- if ($origin_img_save_flag)
- {
- $width = $imgConfig_size[$type][$k]['w'];
- $height = $imgConfig_size[$type][$k]['h'];
- $saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName);
- if (!$saveFlag)
- {
- $saveFlag = false;
- $origin_img_save_flag = false;
- }
- else
- {
- $saveFlag = $fileName;
- }
- }
- }
- }
- }
- return $saveFlag;
- }
- /*
- * 保存file类型文件
- *
- */
- public function saveImg_Wx($WxImg = array() , $type = null)
- {
- //获取保存图片配置
- $imgConfig_savePath = C("img_save.save_path");
- $imgConfig_size = C("img_save.size");
- $saveFlag = false;
- $imgResArr = array();
- if ($WxImg && $imgConfig_savePath[$type])
- {
- foreach ($WxImg as $wiK => $wiV)
- {
- $wxImg = $this->getWxImg($wiV);
- $origin_img_save_flag = true;
- foreach($imgConfig_savePath[$type] as $k => $v)
- {
- if(!is_dir($v.date('Ymd')))
- {
- mkdir($v.date('Ymd'),0777,true);
- }
- if ($k == 'origin')
- {
- file_put_contents($v.'/'.date('Ymd').'/'.$wxImg['saveName'],$wxImg['imgMedia']['mediaBody']);
- $origin_img_path = $v.'/'.date('Ymd').'/'.$wxImg['saveName'];
- $this->THINK_IMAGE->open($origin_img_path);
- $fileName = date('Ymd').'/'.$wxImg['saveName'];
- $imgResArr[] = $fileName;
- }
- else
- {
- if ($origin_img_save_flag)
- {
- $width = $imgConfig_size[$type][$k]['w'];
- $height = $imgConfig_size[$type][$k]['h'];
- $saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName);
- if (!$saveFlag)
- {
- $saveFlag = false;
- $origin_img_save_flag = false;
- }
- else
- {
- $saveFlag = $fileName;
- }
- }
- }
- }
- }
- if($saveFlag)
- {
- $saveFlag = $imgResArr;
- }
- }
- return $saveFlag;
- }
- /*
- * 保存用户的推广图片 在图片上写字!!!!
- */
- public function save_userShareImg($bg_img_path = '' , $head_img_path = '' , $qrCode_img_path = '' , $saveFile = '' , $userName = '' , $userDscp = '' , $font_path = '')
- {
- //设置头像图片为圆角
- $head_img_radius = $this->radius_img($head_img_path,240);
- //合并到背景图中
- $this->mergeImage($bg_img_path,$head_img_radius,$saveFile,array('left' => 200, 'top' => 55, 'width' => 480, 'height' => 480));
- //设置名称
- $this->writeText($saveFile, $saveFile, $userName,255,255,255,1010,32,$font_path, array());
- //设置二维码内容
- $this->mergeImage($saveFile,$qrCode_img_path,$saveFile,array('left' => 255, 'top' => 684, 'width' => 250, 'height' => 245));
- return $saveFile;
- }
- /*
- * 合并图片
- */
- private function mergeImage($bg_img, $main_img, $saveFile, $param)
- {
- extract($param);
- // list($bgWidth, $bgHeight) = getimagesize($bg_img);
- $bgImg = $this->imagecreate($bg_img);
- if (!is_resource($main_img))
- {
- list($mainWidth, $mainHeight) = getimagesize($main_img);
- $mainImg = $this->imagecreate($main_img);
- }
- else
- {
- $mainImg = $main_img;
- $mainWidth = $width;
- $mainHeight = $height;
- }
- imagecopyresized($bgImg, $mainImg, $left, $top, 0, 0, $width, $height, $mainWidth, $mainHeight);
- // imagecopyresized($bgImg, $mainImg, $left, $top, 0, 0, $width, $height, $width,$height);
- ob_start();
- // output jpeg (or any other chosen) format & quality
- imagejpeg($bgImg, NULL, 100);
- $contents = ob_get_contents();
- ob_end_clean();
- imagedestroy($bgImg);
- imagedestroy($mainImg);
- $fh = fopen($saveFile, "w+");
- fwrite($fh, $contents);
- fclose($fh);
- }
- /*
- * 图片写文字
- * $bg_img 背景图片
- * $saveFile 保存图片路径
- * $text 文字
- * $fontColor 字体颜色
- * $top 图片距离顶端高度
- * $fontSize 字体大小
- * $font 字体路径
- * $param 传递的参数
- */
- private function writeText($bg_img, $saveFile, $text, $colorR,$colorG,$colorB , $top , $fontSize , $font , $param = array())
- {
- list($bgWidth, $bgHeight) = getimagesize($bg_img);
- $im = imagecreatefromjpeg($bg_img);
- $fontColor = imagecolorallocate($im, $colorR, $colorG, $colorB);//字的RGB颜色
- $str = mb_convert_encoding($text, "html-entities", "utf-8");;//解决乱码问题
- $fontBox = imagettfbbox($fontSize, 0, $font, $str);//文字水平居中实质
- $width = imagesx($im);
- imagettftext($im, $fontSize, 0, ceil(($width - $fontBox[2]) / 2), $top, $fontColor, $font, $str);
- ob_start();
- // output jpeg (or any other chosen) format & quality
- imagejpeg($im, NULL, 100);
- $contents = ob_get_contents();
- ob_end_clean();
- imagedestroy($im);
- $fh = fopen($saveFile, "w+");
- fwrite($fh, $contents);
- fclose($fh);
- }
- /**
- * 处理圆角图片
- * @param string $imgPath 源图片路径
- * @param integer $radius 圆角半径长度默认为15,处理成圆型
- * @return [type] [description]
- */
- public function radius_img($imgPath = '', $radius = 65)
- {
- $ext = pathinfo($imgPath);
- $src_img = null;
- switch ($ext['extension']) {
- case 'jpg':
- $src_img = imagecreatefromjpeg($imgPath);
- break;
- case 'png':
- $src_img = imagecreatefrompng($imgPath);
- break;
- default:
- $src_img = imagecreatefromjpeg($imgPath);
- break;
- }
- $wh = getimagesize($imgPath);
- $w = $wh[0];
- $h = $wh[1];
- // $radius = $radius == 0 ? (min($w, $h) / 2) : $radius;
- $img = imagecreatetruecolor($w, $h);
- //这一句一定要有
- imagesavealpha($img, true);
- //拾取一个完全透明的颜色,最后一个参数127为全透明
- $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
- imagefill($img, 0, 0, $bg);
- $r = $radius; //圆 角半径
- for ($x = 0; $x < $w; $x++) {
- for ($y = 0; $y < $h; $y++) {
- $rgbColor = imagecolorat($src_img, $x, $y);
- if (($x >= $radius && $x <= ($w - $radius)) || ($y >= $radius && $y <= ($h - $radius))) {
- //不在四角的范围内,直接画
- imagesetpixel($img, $x, $y, $rgbColor);
- } else {
- //在四角的范围内选择画
- //上左
- $y_x = $r; //圆心X坐标
- $y_y = $r; //圆心Y坐标
- if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
- imagesetpixel($img, $x, $y, $rgbColor);
- }
- //上右
- $y_x = $w - $r; //圆心X坐标
- $y_y = $r; //圆心Y坐标
- if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
- imagesetpixel($img, $x, $y, $rgbColor);
- }
- //下左
- $y_x = $r; //圆心X坐标
- $y_y = $h - $r; //圆心Y坐标
- if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
- imagesetpixel($img, $x, $y, $rgbColor);
- }
- //下右
- $y_x = $w - $r; //圆心X坐标
- $y_y = $h - $r; //圆心Y坐标
- if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
- imagesetpixel($img, $x, $y, $rgbColor);
- }
- }
- }
- }
- return $img;
- }
- private function imagecreate($bg)
- {
- $bgImg = @imagecreatefromjpeg($bg);
- if (FALSE == $bgImg) {
- $bgImg = @imagecreatefrompng($bg);
- }
- if (FALSE == $bgImg) {
- $bgImg = @imagecreatefromgif($bg);
- }
- return $bgImg;
- }
- /*
- * 下载微信服务器的图片
- * media_id 微信的媒体id
- * type 保存图片类型
- * */
- public function getWxImg($mediaId)
- {
- if(!class_exists('\JSSDK') && !class_exists('\WxPayConfig'))
- {
- vendor('wxsdkapi.jssdk');
- vendor('wxpayapi.lib.WxPay#Config');
- }
- $res = new \JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET'));
- $accessToken = $res->getAccessToken();
- // $mediaId = 'cVqPIhDPPThUtayzS27GK6RN4-dseA6AZnTJxcg7_VaeuAaKcL53X32hmKxhgiSD';
- // $accessToken = 'KHaopJY444kJ06LcH9ESj-73pkEfFTgIr3L45RURuUxv1KTjgXyFepJ-cTIF_oUyAKyYb5dK2r9L_wC-WDw2USqGQBMobC6DzPImuhPqxB8jxZ41CuLDtJiaEZk8Vf5kWSSjAAAAWW';
- $picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId";
- $ch = curl_init($picUrl);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_NOBODY, 0); //对body进行输出。
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $package = curl_exec($ch);
- $httpInfo = curl_getinfo($ch);
- curl_close($ch);
- $media = array_merge(array('mediaBody' => $package), $httpInfo);
- //求出文件格式
- preg_match('/\w\/(\w+)/i', $media["content_type"], $extmatches);
- $fileExt = $extmatches[1];
- $saveName = md5(microtime(true)).".{$fileExt}";
- $img = array('imgMedia'=>$media,'saveName'=>$saveName);
- return $img;
- }
- /*
- * 下载微信服务器的图片
- * media_id 微信的媒体id
- * type 保存图片类型
- * */
- public function getWxImg2($mediaId,$file)
- {
- if(!class_exists('\JSSDK') && !class_exists('\WxPayConfig'))
- {
- vendor('wxsdkapi.jssdk');
- vendor('wxpayapi.lib.WxPay#Config');
- }
- $res = new \JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET'));
- $accessToken = $res->getAccessToken();
- $picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId";
- return httpcopy($picUrl,$file);
- }
- }
调用方法:
- /**
- * 生成图片
- * @param varchar tid 任务id
- * @httpmethod POST
- * @response 响应数据
- * {
- * "ResultType": "1000",
- * "Message": "上传成功",
- * "AppendData": "图片路径",
- * }
- */
- public function UploadNavImg()
- {
- $tid=Util::getSafeText(I('post.tid'));
- $imgEven = A('Gszc/Img','Event');
- //查出公司名称
- $res = M('gszc_tasks as t')
- ->join('app_gszc_userinfo as u on u.tid=t.id')
- ->where('t.id='.$tid)
- ->field('u.*,t.lastname')
- ->find();
- //主营业务范围
- $zyywfws = explode('、',$res['zyywfw']);
- $zyywfw = array_slice($zyywfws, 0,3); //获取前三个主营业范围
- $zyywfw2 = array_slice($zyywfws, 3,6); //获取后三个主营业务范围
- $imageName = date("His",time())."_".rand(1111,9999).'.jpg';
- $dir = date('Ymd');
- $path = 'uploads/company/'.$dir;
- if (!is_dir($path)){ //判断目录是否存在 不存在就创建
- mkdir($path,0777,true);
- }
- $img = $imgEven->save_userShareImg($_SERVER['DOCUMENT_ROOT']."/uploads/test.png",'','',$_SERVER['DOCUMENT_ROOT']."/".$path."/". $imageName,$res['lastname'],$zyywfw, $zyywfw2, '',$_SERVER['DOCUMENT_ROOT']."/uploads/PingFang Bold.ttf");
- if($img){
- //生成照片成功 保存到任务表里
- $tasks = M('gszc_tasks')->where('id='.$tid)->setField('lastpic',$path."/".$imageName);
- if($tasks){
- $lujing = $path."/".$imageName;
- $this->array_return['errno']=self::__OK__;
- $this->array_return['errmsg']='生成成功!';
- $this->array_return['data']= $lujing ;
- $this->ajaxReturn($this->array_return);
- }
- }else{
- $this->array_return['errno']=self::__ERROR__;
- $this->array_return['errmsg']='生成失败!';
- $this->array_return['data']=[];
- $this->ajaxReturn($this->array_return);
- }
- }
Tags: thinkphp框架
相关文章
- ·ThinkPhp框架学习---框架搭建(2014-07-23)
- ·Thinkphp框架实现多文件上传实现代码(2014-09-21)
- ·不用封装 SQL, HTML 等领域语言了吧?(2014-10-24)
- ·利用thinkphp框架构建网站的执行流程详细介绍(2014-11-20)
- ·phpQuery ------实战应用thinkphp框架(2014-11-20)
- ·thinkphp框架 实现注册登录程序(2015-09-30)
- ·ThinkPHP框架安全实现分析(2021-07-14)
- ·thinkPHP框架整合tcpdf插件操作示例(2021-10-22)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)