


The main content of this article is about using the GD library to write text on pictures. It has a certain reference value. Interested friends can learn about it. I hope it will be helpful to you.
<?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); } }
Calling method:
/** * 生成图片 * @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); } }
Related tutorials:PHP video tutorial
The above is the detailed content of thinkphp framework How to use GD library to write text on pictures (code example). For more information, please follow other related articles on the PHP Chinese website!

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Chinese version
Chinese version, very easy to use

WebStorm Mac version
Useful JavaScript development tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

SublimeText3 Linux new version
SublimeText3 Linux latest version

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.
