[php][gd] text aan een plaatje toevoegen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 06-05 19:28
Ik wil dus een script maken in PHP, die automatisch text op een plaatje zet. Nou, opzich is dat niet moeilijk, met IMAGETTFTEXT lukt het al aardig, alleen is er wel een probleem; ik wil ook dat als de text te lang is, dat het wordt afgeproken (op heel woord) en dat het op de volgende regel wordt geprint.

Ik heb 'ooit' een script gemaakt, maar die werkte niet 100%, ik heb weer ff naar gekeken, maar zie ook geen four direct.

Op een of andere manier komt het af en toe voor dat het toch buiten de rand komt. Wel vreemd ik heb zelf een marge van 10px.

Misschien weet iemand een functie of een lib die het al netjes doet? Of een andere manier?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    $string =
        "weqrweqr ertwert wert erw twer twer twet ".
        "ewr twlerjlkj leeeekj lkjlkjkjlk kljkjklj klklj ".
        "lkjkjlkj kljk;lj kj;kj seeeedfsfsdkj";
    $fontfile = "verdana.ttf";
    $fontsize = 10;

    $fontMetrix_space = getStringWidth(" ", $fontfile, $fontsize);

    $img_src =  imagecreatefromjpeg("matrix.jpg");
    $img_src_x = imagesx($img_src);
    $img_src_y = imagesy($img_src);

    $string = explode(" ", $string);
    $output = array();
    $row_border = 10;
    $row_w = 0;
    $row_count = 0;
    $output[$row_count] = "";
    $row_max_w = $img_src_x - $row_border * 2;

    while($s = array_shift($string))
    {
        $str_w = getStringWidth($s, $fontfile, $fontsize);

        if($row_w + $str_w + $fontMetrix_space< $row_max_w)
        {
            $output[$row_count] .= $s . " ";
            $row_w += $str_w + $fontMetrix_space;
        }
        else
        {
            $row_count++;
            $output[$row_count] = $s . " ";
            $row_w = $str_w + $fontMetrix_space;
        }
    }

    $img_dst = imagecreatetruecolor($img_src_x,
        $img_src_y +  ($row_count + 2) * $fontsize + 5);
    imagecopy($img_dst, $img_src,0,0, 0,0,$img_src_x, $img_src_y);
    $white = imagecolorallocate($img_dst, 255,255,255);

    $i=0;
    while($txt = array_shift($output))
    {
        imagettftext($img_dst, $fontsize, 0,
                $row_border,
                $img_src_y + $fontsize + 3 + $i * ($fontsize + 3),
                $white, $fontfile, $txt);

        $i++;
    }

    header("Content-type: image/jpeg");
    imagejpeg($img_dst);

    function getStringWidth($string, $fontfile, $fontsize)
    {
        $r = imagettfbbox($fontsize, 0, $fontfile, $string);
        
        return $r[4];
    }

[ Voor 5% gewijzigd door ddofborg op 20-05-2003 23:28 ]


Acties:
  • 0 Henk 'm!

  • Dryw.Filtiarn
  • Registratie: September 2001
  • Laatst online: 08-09-2022
Voor zover ik weet is PHP noch GD in staat om een zin voor je af te breken, dat is iets wat je zelf zult moeten coden ben ik bang.

=( Protected by witchcraft )=


Acties:
  • 0 Henk 'm!

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 06-05 19:28
nou, het probleem is dus dat font niet MONO is, en dat elke letter andere grootte kan hebben. Daar heb ik een suntie voor, getStringWidth, voor gemaakt.

code:
1
http://slipstream.student.utwente.nl/tmp/gd/font.php?txt=jouw_text


probeer dit ff... het werkt een beetje...

Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
ddofborg schreef op 20 May 2003 @ 23:35:

code:
1
http://slipstream.student.utwente.nl/tmp/gd/font.php?txt=jouw_text


probeer dit ff... het werkt een beetje...
Ik krijg een heeeel mooi rood slotje op mn beeldscherm :P

Een echte golver is nooit uitgeput