安字符宽度换行

http://hk2.php.net/manual/zh/function.imagettfbbox.php  上的:
<?php

function im_wordwrap($txt,$font,$size,$width) {
  
$sep=array(' ','-'); // separators
  
$res=array();
  
$buf='';
  
// main function loop
  
for($i=0;$i<strlen($txt);$i++) {
      
$l=$txt{$i};
       if (
$l=='^') {
          
$res[]=$buf;
          
$buf='';
           continue;
       }
      
$t=$buf.$l;
      
$bbox=imagettfbbox($size,0,$font,$t);
      
$left=($bbox[0]>$bbox[6])?$bbox[6]:$bbox[0]; // determine most far points
      
$right=($bbox[2]>$bbox[4])?$bbox[2]:$bbox[4]; // idem
      
$w=$right-$left; // get total width
      
if ($w>$width) {
           if (
$buf=='') return false; // FATAL: 1 letter is smallest than the pixel width - avoid infinite loop
           // we can assume that everything present in $buf currently is inside our limits
           // find a separator in string
          
$fp=false;
           foreach(
$sep as $s) {
              
$p=strrpos($buf,$s);
               if ((
$p!==false) and ($p>$fp)) $fp=$p;
           }
           if (
$fp===false) {
              
// let's break here !
              
$res[]=$buf;
              
$buf='';
              
$i--; // dececrase $i to retry this letter
              
continue;
           }
          
// $fp+1 -> we put the separator char at the end of the prev. line =p
          
$res[]=substr($buf,0,$fp+1);
          
$buf=substr($buf,$fp+1);
          
$i--;
           continue;
       }
      
$buf.=$l;
   }
   if (
$buf!='') $res[]=$buf;
   return
$res;
}
?> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值