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);
?>

时间: 2013-03-12

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

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

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

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

解析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去除换行的三种方法代码 复制代码

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

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

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

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

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获取表单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去除换行(回车换行)的三种方法

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

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

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的值并处理回车换行的方法

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

PHP实现将textarea的值根据回车换行拆分至数组

本文实例讲述了PHP实现将textarea的值根据回车换行拆分至数组的方法.分享给大家供大家参考.具体分析如下: textarea回车换行为 \r\n $keyword_list = trim($_REQUEST['keywords']); $keyword_arr = explode("\r\n", $keyword_list); 这个地方需要注意是要去除textarea 前后的空格,否则会多出一个 或者使用explode也是可以的 只是不能用\r\n只能用双引号,不能用单引号 希望

用javascript获取textarea中的光标位置

对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到好的办法.昨天我在网上找到了一段javascript代码,本来不想把原版放在这里的,就是因为太精彩了,怕我给改坏了,所以还是原版放在这里吧. var start=0;     var end=0;     function add(){                var textBox = document.getElementById("ta"

Python获取文件ssdeep值的方法

本文实例讲述了Python获取文件ssdeep值的方法,分享给大家供大家参考.具体方法如下: 首先,得到ssdeep值,需要先import ssdeep 在ubuntu上安装pyssdeep时 一直出错  后来发现apt-cache search "ssdeep"时把几个全apt-get install 上,但问题依旧. 后来下载到pyssdeep的源文件 ,tar zxvf pyssdeep.tar.zip 然后 apt-get install python-dev 然后 pytho

jQuery获取多种input值的简单实现方法

获取input的checked值是否为true: 第一种: if($("input[name=item][value='val']").attr('checked')==true) //判断是否已经打勾 --注:name即控件name属性,value即控件value属性 第二种: 可以不指定属性值,因一组checkbox的value值都会保存其在数据库中对应的id,最好写成如下方式: if($("input[name=row_checkbox]").attr('ch

jquery遍历table的tr获取td的值实现方法

html代码: <tbody id="history_income_list"> <tr> <td align="center"><input type="text" class="input-s input-w input-hs"></td> <td align="center"><input type="text&q

Bootstrap Table 在指定列中添加下拉框控件并获取所选值

背景 最近在使用Bootstrap table ,有一个在某一列添加一个下拉列表,并且通过 "getAllSelections"方法获取所选行的需求,在实现这个功能的时,走了一些弯路,遇到了一些坑.所以今天总结出来,既是自己的学习,也分享给大家,希望能够有些帮助. 如何解决 添加这个下拉列表有以下两种方法: 利用Column options 中的 formatter 将数据转换成下拉列表的形式 使用bootstrap-table拓展中的editable插件 这次主要介绍第一种,基本的思

C#获取存储过程返回值和输出参数值的方法

1.获取Return返回值 复制代码 代码如下: //存储过程//Create PROCEDURE MYSQL//     @a int,//     @b int//AS//     return @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());conn.Open();SqlCommand MyC

jquery获取多个checkbox的值异步提交给php的方法

本文实例讲述了jquery获取多个checkbox的值异步提交给php的方法.分享给大家供大家参考.具体实现方法如下: html代码: <tr> <td><input type="checkbox" name="uid" value="<?=$item['mtaccount_id']?>"></td> <td><?=$item['mtaccount_id']?>&

Python中执行存储过程及获取存储过程返回值的方法

本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法.分享给大家供大家参考,具体如下: 在Pathon中如何执行存储过程呢?可以使用如下方法: 存储过程定义基本如下: ALTER procedure [dbo]. [mysp] @Station varchar ( 50), @SN varchar ( 50), @Info varchar ( 500) output , @Msg varchar ( 500) output 1. 使用adodbapi from adodbapi i