thinkphp框架如何利用GD库在图片上编写文字(代码范例)

thinkphp框架如何利用GD库在图片上编写文字(代码范例)

内容导读

收集整理的这篇技术教程文章主要介绍了thinkphp框架如何利用GD库在图片上编写文字(代码范例),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含15111字,纯文字阅读大概需要22分钟

内容图文

本篇文章的主要内容是关于用GD库在图片上编写文字的代码范例,具有一定的参考价值,感兴趣的朋友可以学习了解一下,希望对你有帮助。
<?php/** * Created by PhpStorm. * User: Administrator */namespace HomeEvent;use ThinkImage;use ThinkUpload;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);



}

}

相关教程:PHP视频教程

以上就是thinkphp框架 如何利用GD库在图片上编写文字(代码范例)的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的thinkphp框架如何利用GD库在图片上编写文字(代码范例)全部内容,希望文章能够帮你解决thinkphp框架如何利用GD库在图片上编写文字(代码范例)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com