0

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 image

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.

3
  • Take a look here: php.net/manual/en/function.imagettfbbox.php Commented Mar 8, 2016 at 20:59
  • 2
    Using a GET like that could lead to unwanted texts on your image. If this is for a customer, they wouldn't be pleased if anyone could create images with provocative, filthy or otherwise harmful texts. Commented Mar 8, 2016 at 21:20
  • this is true, the problem here arises that the "promo code" will change dynamically based on how they got to the website for an employee referral program Commented Mar 9, 2016 at 13:40

1 Answer 1

1

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);
Sign up to request clarification or add additional context in comments.

1 Comment

the problem here is there will be times the promo codes go from say test100 to switch500, there different char lengths and i want to squeeze it into that space

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.