GD库,文字换行生成到图片上。 我想让一段文字生成到图片上。用的GD库中的imagettftext。图片只有200px宽度。文字有几百个,需要换行。我在字符串中插入\n后输出的还是一行文字。怎么让他输出到图片上换行? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要写成"abc".PHP_EOL."def",不是直接插入 是这样连接的。一个字符串。截取出一部分。赋值给一个新的量。直接用echo 输出这个新的量是换行的。 需要用 imagettfbbox 探测每个(行)字符的宽度人工断行,逐行定位输出 你以为的太简单了吧?PHP的API里有没有告诉你可以用哪些换行?没有,就说明不能!你必须自己计算文字的大小,计算第一行输出多少个字符,第一行输出完后第二行在哪里输出。GD库是“绘图”库,不是“文本输出”库。windows的记事本中的文字其实也是“画”出来的,每个字符的位置,换行,都是要算出来的。不懂了吧?没学基础吧?给你看一个我做的微博应用的例子。http://www.foxfy.com/apps/juanzhou/这是一个把文字转化为图片的微博应用,使用各种字体和背景生成卷轴,自动根据字数决定行列数量。就是用的php的GD库,没有别的技术,纯php技术。 兄弟,是这个意思吧,我测试可以用的。<?phpheader ("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);?> 关于php+mysql网站上传.csv文件的问题 php+mysql 做登陆出问题 相当奇怪,file_get_contents直接把结果显示出来 php 字符串指定位置换行 在线等啊~ 怎样获取IE的代理设置? 最简单的cookie问题 怎么用自己的方法加密PHP 怎么屏蔽文件的地址? cookie 不行了。怎么学 有没有zend optimizer 支持php6的? 各位大大,帮个忙,解释一下!
是这样连接的。一个字符串。
截取出一部分。赋值给一个新的量。
直接用echo 输出这个新的量是换行的。
人工断行,逐行定位输出
PHP的API里有没有告诉你可以用哪些换行?没有,就说明不能!你必须自己计算文字的大小,计算第一行输出多少个字符,第一行输出完后第二行在哪里输出。
GD库是“绘图”库,不是“文本输出”库。
windows的记事本中的文字其实也是“画”出来的,每个字符的位置,换行,都是要算出来的。
不懂了吧?没学基础吧?给你看一个我做的微博应用的例子。http://www.foxfy.com/apps/juanzhou/这是一个把文字转化为图片的微博应用,使用各种字体和背景生成卷轴,自动根据字数决定行列数量。
就是用的php的GD库,没有别的技术,纯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);
?>