热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php图片写入带问号_PHP实现文字写入图片功能

***PHP实现文字写入图片*classwordsOnImg{public$confignull;***param$config传入参数*param$config[file]图片文

/**

* 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

$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,"
")!== false){

$have = true;

}

if($have){

$words_text = explode("
",$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
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.
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);



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
author-avatar
zhengping4476
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有