PHP GD - Align text center-horizontally and decrease font size to keep it inside the image

前端 未结 2 1062
长情又很酷
长情又很酷 2021-02-10 01:58

Hope you are doing great.

I’m still a newbie with php so after making some reading and while checking some posts here I was able to put some text over an image with the

相关标签:
2条回答
  • 2021-02-10 02:34

    You need the width of the image and the width of the text to relate both.

    // get image dimensions
    list($img_width, $img_height,,) = getimagesize("fabian.jpg");
    
    // find font-size for $txt_width = 80% of $img_width...
    $font_size = 1; 
    $txt_max_width = intval(0.8 * $img_width);    
    
    do {        
        $font_size++;
        $p = imagettfbbox($font_size, 0, $font_path, $text);
        $txt_width = $p[2] - $p[0];
        // $txt_height=$p[1]-$p[7]; // just in case you need it
    } while ($txt_width <= $txt_max_width);
    
    // now center the text
    $y = $img_height * 0.9; // baseline of text at 90% of $img_height
    $x = ($img_width - $txt_width) / 2;
    
    imagettftext($jpg_image, $font_size, 0, $x, $y, $white, $font_path, $text);
    
    0 讨论(0)
  • 2021-02-10 02:37

    You can use stil/gd-text class to align the text. Disclaimer: I am the author.

    <?php
    use GDText\Box;
    use GDText\Color;
    
    $jpg_image = imagecreatefromjpeg('fabian.jpg');
    
    $textbox = new Box($jpg_image);
    $textbox->setFontSize(75);
    $textbox->setFontFace('fabian.TTF');
    $textbox->setFontColor(new Color(255, 255, 255));
    $textbox->setBox(
        50,  // distance from left edge
        50,  // distance from top edge
        200, // textbox width
        100  // textbox height
    );
    
    // text will be aligned inside textbox to center horizontally and to top vertically
    $textbox->setTextAlign('center', 'top');
    $textbox->draw(strtoupper($nombre));
    

    However it is not a complete answer, because it can't decrease font size automatically.

    0 讨论(0)
提交回复
热议问题