简体   繁体   中英

Writing text to an image using php

I have this task working great! I have successfully wrote text to an image then displayed the image using php, however the problem I'm running into is getting the font size perfect and to fit within a contained area. Im using imagettftext()

I'm getting this to work however when i move the text to the desired location im manually changing the font to then get it to fit. I would like to text to perfectly fill a "box" inside the image.

Here is my code

Main.php

    check out the promo code below<br />

    <img src="imagem.php?promo=DISH120" alt="" />

imagem.php $font = 'font-type.ttf';

    $rImg = ImageCreateFromJPEG( "test.jpg" );

    $color = imagecolorallocate($rImg, 255, 255, 255);

    imagettftext($rImg, 20, 0, 660, 130, $color, $font, urldecode($_GET['promo']));

    header('Content-type: image/jpeg');
    imagejpeg($rImg, NULL,100);

Here is the image im writing 图片

i want the text to write to the bottom right next to code, however when i make the font big enough to match the CODE height it way to wide.

ADDITION

 <?php 
function makeTextBlock($text, $fontfile, $fontsize, $width) 
{    
    $words = explode(' ', $text); 
    $lines = array($words[0]); 
    $currentLine = 0; 
    for($i = 1; $i < count($words); $i++) 
    { 
        $lineSize = imagettfbbox($fontsize, 0, $fontfile, $lines[$currentLine] . ' ' . $words[$i]); 
        if($lineSize[2] - $lineSize[0] < $width) 
        { 
            $lines[$currentLine] .= ' ' . $words[$i]; 
        } 
        else 
        { 
            $currentLine++; 
            $lines[$currentLine] = $words[$i]; 
        } 
    } 

    return implode("\n", $lines); 
} 
?>

I found this function re formats a text string into a text block of a given width, this is kinda what im trying to achieve however, im not sure how to integrate this. I want a box which width and height never change that will be filled with text that its character count will change.

This sounds like an issue with the font you're using. Try to make sure that the font matches the font of the text in the image, so that when you increase the size of the font to fit the image, it doesn't go too wide.

Other things I'd point out:

  1. Based on what you're doing, I don't recommend a $_GET parameter.
  2. You should remove the image from memory once you're done with it, like this: imagedestroy($rImg);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM