PHP imagettfbbox 图像GD库函数

  • 定义和用法

    imagettfbbox - 取得使用 TrueType 字体的文本的范围
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
  • 语法

    imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
    
    imagettfbbox() 计算并返回一个包围着 TrueType 文本范围的虚拟方框的像素大小。
  • 参数

    参数 必需的 描述
    size 像素单位的字体大小。
    angle text 将被度量的角度大小。
    fontfile TrueType 字体文件的文件名(可以是 URL)。根据 PHP 所使用的 GD 库版本,可能尝试搜索那些不是以 '/' 开头的文件名并加上 '.ttf' 的后缀并搜索库定义的字体路径。
    text 要度量的字符串。
  • 返回值

    返回一个含有 8 个单元的数组表示了文本外框的四个角:
    • 0 左下角 X 位置
    • 1 左下角 Y 位置
    • 2 右下角 X 位置
    • 3 右下角 Y 位置
    • 4 右上角 X 位置
    • 5 右上角 Y 位置
    • 6 左上角 X 位置
    • 7 左上角 Y 位置
    这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。
    本函数同时需要 GD 库和 FreeType 库。
  • 示例

    /*一个简单的函数来计算“精确”边界框(单像素精度)。
    该函数返回具有以下键的关联数组:
    left, top:您将传递给imagettftext的坐标
    width, height:创建的图像尺寸*/
            function calculateTextBox($font_size, $font_angle, $font_file, $text) {
      $box   = imagettfbbox($font_size, $font_angle, $font_file, $text);
      if( !$box )
        return false;
      $min_x = min( array($box[0], $box[2], $box[4], $box[6]) );
      $max_x = max( array($box[0], $box[2], $box[4], $box[6]) );
      $min_y = min( array($box[1], $box[3], $box[5], $box[7]) );
      $max_y = max( array($box[1], $box[3], $box[5], $box[7]) );
      $width  = ( $max_x - $min_x );
      $height = ( $max_y - $min_y );
      $left   = abs( $min_x ) + $width;
      $top    = abs( $min_y ) + $height;
      // to calculate the exact bounding box i write the text in a large image
      $img     = @imagecreatetruecolor( $width << 2, $height << 2 );
      $white   =  imagecolorallocate( $img, 255, 255, 255 );
      $black   =  imagecolorallocate( $img, 0, 0, 0 );
      imagefilledrectangle($img, 0, 0, imagesx($img), imagesy($img), $black);
      // for sure the text is completely in the image!
      imagettftext( $img, $font_size,
                    $font_angle, $left, $top,
                    $white, $font_file, $text);
      // start scanning (0=> black => empty)
      $rleft  = $w4 = $width<<2;
      $rright = 0;
      $rbottom   = 0;
      $rtop = $h4 = $height<<2;
      for( $x = 0; $x < $w4; $x++ )
        for( $y = 0; $y < $h4; $y++ )
          if( imagecolorat( $img, $x, $y ) ){
            $rleft   = min( $rleft, $x );
            $rright  = max( $rright, $x );
            $rtop    = min( $rtop, $y );
            $rbottom = max( $rbottom, $y );
          }
      // destroy img and serve the result
      imagedestroy( $img );
      return array( "left"   => $left - $rleft,
                    "top"    => $top  - $rtop,
                    "width"  => $rright - $rleft + 1,
                    "height" => $rbottom - $rtop + 1 );
    }
    
  • 相关函数

    imagecreatetruecolor() - 新建一个真彩色图像
    getimagesize() - 取得图像大小。
    imagesx() - 获取图像宽。