PHP:imagettftext文本右对齐(RTL)

时间:2016-07-05 21:09:45

标签: php right-to-left imagettftext

我希望Text是“Text Align Right”。

.products li {
    float: none;
    margin: 0px 10px;  
    padding: 45px 5px;
    min-width: 50px;
    height: 400px; 
    position: relative;
    border: 2px solid #427cb7;
    background-color: #c6d7e9;
    display: inline-block;
    text-align: center;
    vertical-align:top;
}
你知道吗? 因为我不懂。 我已经谷歌很多了。 你们需要知道,我不是真正的PHP,这就是我需要帮助的原因。 如果您有疑问,请询问!

1 个答案:

答案 0 :(得分:1)

非常清晰的func。版本,带有示例....

<?php 

function calculateTextBox($text,$fontFile,$fontSize,$fontAngle) { 
    /************ 
    simple function that calculates the *exact* bounding box (single pixel precision). 
    The function returns an associative array with these keys: 
    left, top:  coordinates you will pass to imagettftext 
    width, height: dimension of the image you have to create 
    *************/ 
    $rect = imagettfbbox($fontSize,$fontAngle,$fontFile,$text); 
    $minX = min(array($rect[0],$rect[2],$rect[4],$rect[6])); 
    $maxX = max(array($rect[0],$rect[2],$rect[4],$rect[6])); 
    $minY = min(array($rect[1],$rect[3],$rect[5],$rect[7])); 
    $maxY = max(array($rect[1],$rect[3],$rect[5],$rect[7])); 

     return array( 
         "left"   => abs($minX) - 1, 
         "top"    => abs($minY) - 1, 
         "width"  => $maxX - $minX, 
         "height" => $maxY - $minY, 
         "box"    => $rect 
     ); 
} 

// Example usage - gif image output 

$text_string    = "Hullo World"; 
$font_ttf        = "./fonts/arial.ttf"; 
$font_size        = 22; 
$text_angle        = 0; 
$text_padding    = 10; // Img padding - around text 

$the_box        = calculateTextBox($text_string, $font_ttf, $font_size,     $text_angle); 

$imgWidth    = $the_box["width"] + $text_padding; 
$imgHeight    = $the_box["height"] + $text_padding; 

$image = imagecreate($imgWidth,$imgHeight); 
imagefill($image, imagecolorallocate($image,200,200,200)); 

$color = imagecolorallocate($image,0,0,0); 
imagettftext($image, 
    $font_size, 
    $text_angle, 
    $the_box["left"] + ($imgWidth / 2) - ($the_box["width"] / 2), 
    $the_box["top"] + ($imgHeight / 2) - ($the_box["height"] / 2), 
    $color, 
    $font_ttf, 
    $text_string); 

    header("Content-Type: image/gif"); 
    imagegif($image); 
    imagedestroy($image); 

?> 

[记住:标签之前或之后没有空格,因为header()调用,你烤! ]

如果您正在寻找简单的文本对齐方式,则需要使用imagettfbbox()命令。当给出正确的参数时,它将返回数组中待制作文本字段的边界,这将允许您计算需要用于居中或对齐文本的x和y坐标。

横向居中示例:

<?php
    $tb = imagettfbbox(17, 0, 'airlock.ttf', 'Hello world!');
?>

$ tb将包含:

Array
(
    [0] => 0 // lower left X coordinate
    [1] => -1 // lower left Y coordinate
    [2] => 198 // lower right X coordinate
    [3] => -1 // lower right Y coordinate
    [4] => 198 // upper right X coordinate
    [5] => -20 // upper right Y coordinate
    [6] => 0 // upper left X coordinate
    [7] => -20 // upper left Y coordinate
)

对于水平对齐,我们需要从图像的宽度中减去“文本框”的宽度{$ tb [2]或$ tb [4]},然后减去2。

假设你的图像宽200像素,你可以这样做:

<?php

    $x = ceil((200 - $tb[2]) / 2); // lower left X coordinate for text
    imagettftext($im, 17, 0, $x, $y, $tc, '../arial.ttf', 'Hello world!'); // write text to image
?>

这将为您的文本提供完美的水平中心对齐,给出或取1个像素。玩得开心!

http://php.net/manual/en/function.imagettfbbox.php