专栏首页恩蓝脚本PHP实现文字写入图片功能

PHP实现文字写入图片功能

本文实例为大家分享了PHP实现文字写入图片的具体代码,供大家参考,具体内容如下

/**
* PHP实现文字写入图片
*/
class wordsOnImg {
public $config = null;
/**
* @param $config 传入参数
* @param $config['file'] 图片文件
* @param $config['size'] 文字大小
* @param $config['angle'] 文字的水平角度
* @param $config['fontfile'] 字体文件路径
* @param $config['width'] 预先设置的宽度
* @param $config['x'] 开始写入时的横坐标
* @param $config['y'] 开始写入时的纵坐标
*/
public function __construct($config=null){
if(empty($config)){
return 'must be config';
}
$fileArr = explode(".",$config['file']);
$config['file_name'] = $fileArr[0];
$config['file_ext'] = $fileArr[1];
$this- config = $config;
}
/**
* PHP实现图片上写入实现文字自动换行
* @param $fontsize 字体大小
* @param $angle 角度
* @param $font 字体路径
* @param $string 要写在图片上的文字
* @param $width 预先设置图片上文字的宽度
* @param $flag  换行时单词不折行
*/
public function wordWrap($fontsize,$angle,$font,$string,$width,$flag=true) {
$content = "";
if($flag){
$words = explode(" ",$string);
foreach ($words as $key= $value) {
$teststr = $content." ".$value;
$testbox = imagettfbbox($fontsize, $angle, $font, $teststr);
//判断拼接后的字符串是否超过预设的宽度
if(($testbox[2]   $width)) {
$content .= "\n";
}
$content .= $value." ";
}
}else{
//将字符串拆分成一个个单字 保存到数组 letter 中
for ($i=0;$i<mb_strlen($string);$i++) {
$letter[] = mb_substr($string, $i, 1);
}
foreach ($letter as $l) {
$teststr = $content." ".$l;
$testbox = imagettfbbox($fontsize, $angle, $font, $teststr);
// 判断拼接后的字符串是否超过预设的宽度
if (($testbox[2]   $width) && ($content !== "")) {
$content .= "\n";
}
$content .= $l;
}
}
return $content;
}
/**
* 实现写入图片
* @param $text 要写入的文字
* @param $flag 是否直接输出到浏览器,默认是
*/
public function writeWordsToImg($text,$flag=true){
if(empty($this- config)){
return 'must be config';
}
//获取图片大小
$img_pathWH = getimagesize($this- config['file']);
//打开指定的图片文件
$im = imagecreatefrompng($this- config['file']);
#设置水印字体颜色
$color = imagecolorallocatealpha($im,0, 0, 255, 75);//蓝色
$have = false;
if(stripos($text,"<br/ ")!== false){
$have = true;
}
if($have){
$words_text = explode("<br/ ",$text);
$words_text[0] = $this- wordWrap($this- config['size'], $this- config['angle'], $this- config['fontfile'], $words_text[0], $this- config['width']); //自动换行处理
$words_text[1] = $this- wordWrap($this- config['size'], $this- config['angle'], $this- config['fontfile'], $words_text[1], $this- config['width']); //自动换行处理
$words_text[2] = $this- wordWrap($this- config['size'], $this- config['angle'], $this- config['fontfile'], $words_text[2], $this- config['width']); //自动换行处理
imagettftext($im, $this- config['size'], $this- config['angle'], $this- config['x'], $this- config['y'], $color, $this- config['fontfile'], $words_text[0]);
imagettftext($im, $this- config['size'], $this- config['angle'], $this- config['x'], $this- config['y']+30, $color, $this- config['fontfile'], "  ".$words_text[1]);
imagettftext($im, $this- config['size'], $this- config['angle'], $img_pathWH[0]/2+70, $img_pathWH[1]-80, $color, $this- config['fontfile'], $words_text[2]);
if($flag){
header("content-type:image/png");
imagepng($im);
imagedestroy($im);
}
imagepng($im,$this- config['file_name'].'_1.'.$this- config['file_ext']);
imagedestroy($im);
}
$words_text = $this- wordWrap($this- config['size'], $this- config['angle'], $this- config['fontfile'], $text, $this- config['width']); //自动换行处理
imagettftext($im, $this- config['size'], $this- config['angle'], $this- config['x'], $this- config['y'], $color, $this- config['fontfile'], $words_text);
if($flag){
header("content-type:image/png");
imagepng($im);
imagedestroy($im);
}
imagepng($im,$this- config['file_name'].'_1.'.$this- config['file_ext']);
imagedestroy($im);
}
}
$text = "Dear Kang<br/ If you can hold something up and put it down, it is called weight lifting;if you can hold something up but can never put it down, it's called bueden bearing. Pitifully, most of people are bearing heavy burdens when they are in love.\n\nBeing nice to someone you dislike doesn't mean you're a hypocritical people. It means you're mature enough to tolerate your dislike towards them.<br/ Mr. Kang";
$data = array(
'file'= '20171226152410.png',
'size'= 12,
'angle'= 0,
'fontfile'= './Font/ChalkboardSE.ttc',
'width'= 270,
'x'= 20,
'y'= 70
);
//使用
$wordsOnImgObj = new wordsOnImg($data);
$wordsOnImgObj- writeWordsToImg($text);

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python configparser模块配置文件过程解析

    ConfigParser模块在Python3修改为configparser,这个模块定义了一个ConfigeParser类,该类的作用是让配置文件生效。配置文件...

    砸漏
  • php版本CKEditor 4和CKFinder安装及配置方法图文教程

    本文实例讲述了php版本CKEditor 4和CKFinder安装及配置方法。分享给大家供大家参考,具体如下:

    砸漏
  • Python configparser模块操作代码实例

    砸漏
  • swoole 4.x 连接池协程版本细节坑

    使用swoole 4.x协程版本后,系统资源利用率提高很多,与此同时发现很多开发习惯已经不同

    猿哥
  • 一张刮刮卡竟包含这么多前端知识点

    刮刮卡是大家非常熟悉的一种网页交互元素了。实现刮涂层的效果,需要借助canvas来实现,想必每个前端工程师都清楚。实现刮刮卡并不难,但其中却涉及很多知识点,掌握...

    Nealyang
  • SQL炼金术

    有时最好不要使用SQLAlchemy的线程作用域会话(例如,当您需要在异步系统中使用Pyramid时)。幸运的是,这样做很容易。您可以将会话工厂存储在应用程序的...

    用户7466307
  • 玩转webpack(一)下篇:webpack的基本架构和构建流程

    在研究了一段时间的 webpack 源码之后,自己希望写个系列文章,结合自己的实践一起来谈谈 webpack 插件这个主题,也希望能够帮助其他人更全面地了解 w...

    小时光
  • Effective Java(第三版)——条目十六:在公共类中使用访问方法而不是公共属性

    “ 有时候,你可能会试图写一些退化的类(degenerate classes),除了集中实例属性之外别无用处”

    每天学Java
  • NULL指针的奇妙之旅

    今天带大家了解下NULL指针是如何形成的? 当然了我们要深入到操作系统中去看看为何访问一个NULL指令会报Segment Fault的错误。

    DragonKingZhu
  • 修复cocos2d-jsv3.1文本换行bug

    本文作者:IMWeb vienwu 原文出处:IMWeb社区 未经同意,禁止转载 使用cocos2d-js版开发跨平台手游非常简单,并且在手机端也拥有...

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券