首页 > 编程 > PHP > 正文

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

2020-03-22 17:00:55
字体:
来源:转载
供稿:网友
本篇文章的主要内容是关于用GD库在图片上编写文字的代码范例,具有一定的参考价值,感兴趣的朋友可以学习了解一下,希望对你有帮助。

 ?php * Created by PhpStorm. * User: Administratornamespace Home/Event;use /Think/Image;use /Think/Upload;html' target='_blank'>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;
$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;
#$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
$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;
$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])
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;
public function save_userShareImg($bg_img_path = , $head_img_path = , $qrCode_img_path = , $saveFile = , $userName = , $userDscp = , $font_path = )
//合并到背景图中 $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);
* @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 $x++) { for ($y = 0; $y $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;
$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
$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库在图片上编写文字(代码范例)的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表