php文本转图片自动换行的方法

今天无意中浏览网面的时候发现一个长微博,它可以将文本转成png图片,于是乎就研究一下PHP文本转图片的方式,其实只要是用到了PHP的扩展库,GD库来生成图片,再通过图像函数生成,代码写出来后,发现如果文字太多了,图片就会超过屏幕的宽度,导致浏览器右拉条的出现,于是,想想有没有什么办法可以使图片能够自动换行,通过GG,发现了一篇文章,通过判断字符串和截取字符串再拼接起来实现文本图片自动换行,以下贴出此代码,以学习之中:

代码如下:

<?php
header ("Content-type: image/png");
mb_internal_encoding("UTF-8"); // 设置编码

function autowrap($fontsize, $angle, $fontface, $string, $width) {
// 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
 $content = "";

// 将字符串拆分成一个个单字 保存到数组 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, $fontface, $teststr);
  // 判断拼接后的字符串是否超过预设的宽度
  if (($testbox[2] > $width) && ($content !== "")) {
   $content .= "\n";
  }
  $content .= $l;
 }
 return $content;
}

$bg = imagecreatetruecolor(300, 290); // 创建画布
$white = imagecolorallocate($bg, 255, 255, 255); // 创建白色
$text = "前段时间练习使用 PHP 的 GD 库时,为了文本的自动换行纠结了很久。虽然可以通过插入 \n 实现换行,但考虑到文本中既有中文又有英文,强制限定每多少个文字就换行的效果很差。后来终于找到了一个英文下的自动换行的方法,其大概原理是将空格作为分隔符,将字符串分割为一个个单词,然后再一个接一个地拼接在一起,判断其长度是否超过画布,若超过则换行再拼接,否则继续拼接。考虑到中文需要将每个文字都拆开,所以我进行了一点修改,完整代码如下。";
$text = autowrap(12, 0, "simsun.ttc", $text, 280); // 自动换行处理

// 若文件编码为 GB2312 请将下行的注释去掉
// $text = iconv("GB2312", "UTF-8", $text);

imagettftext($bg, 12, 0, 10, 30, $white, "simsun.ttc", $text);
imagepng($bg);
imagedestroy($bg);
?>

(0)

相关推荐

  • PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式

    在开发的过程中,经常会遇到需要给别人提供一个输入框,然后别人输入一些ID,或者关键字的东西,例如wordpress的后台的标签输入框: 这个就是只是判断英文状态下的逗号,要是有人不小心输入了中文状态下的逗号怎么办?小数点怎么办? 于是我就用正则写了一个表达式,把带有空格换行符之类的替换成逗号. 把提交的id带有空格换行符之类的替换成逗号,然后用explode函数切换成数组. 复制代码 代码如下: $ids=$_POST["ID"];$id= preg_replace("/(\

  • php去除换行(回车换行)的三种方法

    复制代码 代码如下: <?php    //php 不同系统的换行  //不同系统之间换行的实现是不一样的  //linux 与unix中用 \n  //MAC 用 \r  //window 为了体现与linux不同 则是 \r\n  //所以在不同平台上 实现方法就不一样  //php 有三种方法来解决 //1.使用str_replace 来替换换行  $str = str_replace(array("\r\n", "\r", "\n"

  • 解析PHP处理换行符的问题 \r\n

    一首先说说 \r 与\n的区别回车"(Carriage Return)和"换行"(Line Feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符.要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失. 于是,研制人员想了个办法解决这个问题,就是在每行后面

  • 浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题

    今天遇到了一个问题就是用fwrite写入txt文件的时候用 rn不能换行试了很久都没找到办法!突然之间想到一个东东以前看书见过后来还是用这个东东给解决了!现在写出来预防将来忘记也希望能帮到需要帮助的朋友!直接看代码: 复制代码 代码如下: <?php$stream = fopen("robots.txt", "w+");fwrite($stream, "你换行了吗\r\n我已经换行了!");?>

  • php 字符串中的\n换行符无效、不能换行的解决方法

    例如下面的代码: 复制代码 代码如下: <?phpecho 'hello\n';echo 'world';?> 程序的中的换行符\n会直接输出,无法正确换行,解决方法是把单引号改为双引号: 复制代码 代码如下: <?phpecho "hello\n";echo "world";?> 这样就可以了!其实就是PHP的双引号和单引号的区别问题,简单个概括下双引号中的变量可以解析,单引号就是绝对的字符串. 附:PHP去除换行的三种方法代码 复制代码

  • php去除换行符的方法小结(PHP_EOL变量的使用)

    一个小小的换行,其实在不同的平台有着不同的实现,为什么要这样,可以是世界是多样的.本来在unix世界换行就用/n来代替,但是windows为了体现他的不同,就用/r/n,更有意思的是在mac中用/r.因此unix系列用 /n,windows系列用 /r/n,mac用 /r,这样就用你写的程序在不同的平台上运行有着不少的麻烦.下面是PHP去除换行符的一些常见方法. 第一种写法: 复制代码 代码如下: $content=str_replace("\n","",$cont

  • PHP按行读取文件时删除换行符的3种方法

    PHP按行读取文件 去掉换行符"\n": 第一种: 复制代码 代码如下: $content=str_replace("\n","",$content);echo $content; 或者: 复制代码 代码如下: $content=str_replace(array("\n","\r"),"",$content); 第二种: 复制代码 代码如下: $content=preg_replace

  • php表单转换textarea换行符的方法

    下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n  (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成<br >,其实不是的: 看php手册解释: nl2br –  Inserts HTML line breaks before all newlines in a string Returns string with '<br

  • PHP获取表单textarea数据中的换行问题

    测试页面代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-e

  • php获取textarea的值并处理回车换行的方法

    本文实例讲述了php获取textarea的值并处理回车换行的方法.分享给大家供大家参考.具体实现方法如下: 一般来说,在html表单中textarea中我们按回车与换行都是一些ascii或特殊的字符的编码,如果不进行转换输出文字是没的排版的. php获取textarea的值是十分简单的 textarea回车换行为 \r\n 下面看例子 HTML代码: 复制代码 代码如下: <Textarea name="test" rows="3″ cols="20″ id=

  • php 批量添加多行文本框textarea一行一个

    复制代码 代码如下: $act=!empty($_GET['act']) ? trim($_GET['act']) : ''; switch($act) { case 'adda': $area['a_value'] = trim($_POST['a_value']); $area['a_type']=3; if(strpos($area['a_value'], "\n") === false) { //echo $area['a_value']; //add($area); //$D

  • php中的PHP_EOL换行符详细解析

    在unix系列用 \n在windows系列用 \r\n在mac用 \rPHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 比如:  复制代码 代码如下: echo PHP_EOL;       //windows平台相当于    echo "\r\n";       //unix\linux平台相当于    echo "\n";       //mac平台相当于    echo "\r"; 我们可以用函数get_defined_co

  • asp和php下textarea提交大量数据发生丢失的解决方法

    我用textarea提交大量的阿数据 我开始字段类型选的是mediumtext,数据有丢失 后来我改成了longtext,数据依然丢失, 而且发现和mediumtext提交到数据库中的数据量是一样的, 并没有增加.该怎样解决呢? asp下只需要用下面的方法即可 复制代码 代码如下: Sub Content()     Dim i,sContent     ' 取提交过来的数据     ' 据说对大表单的自动处理,要使用循环,否则大于100K的内容将有可能取不到,单个表单项的限制为102399字节

随机推荐