Avatar billede sjh Nybegynder
15. september 2006 - 13:58 Der er 14 kommentarer og
1 løsning

ImageTTFBBox() dreje teksten (rotate)

Jeg har et problem med ImageTTFBBox() syntes ikke jeg kan få noget ud af den.. (ikke noget som passer) problemet er at få det til at virke når man vil dreje teksten (rotate)
så ændre alle positioner sig til noget som ikke giver mening, i forhold til hvis Angle er 0 (Null)

<?php
  $Size = 20;      // Font size
  $Angle = 40;    // Font rotate
  $Font = "Arial"; // Font type/name
  $Text = "This is a test!";

  $Array = ImageTTFBBox($Size, $Angle, $Font, $Text);

  /* Her er problemet, at finde top, left, width, height
  $Top = $Array[?];
  $Left = $Array[?];
  $Width = $Array[?];
  $Height = $Array[?];
  */

  $hImage = ImageCreate($Width, $Height);
  $Backcolor = ImageColorAllocate($hImage, 0, 0, 255);    // Background color (Blue)
  $Forecolor = ImageColorAllocate($hImage, 255, 255, 255); // Fore color (White)

  ImageTTFText($hImage, $Size, $Angle, $Left, $Top, $Forecolor, $Font, $Text);

  Header("Content-type: image/png");
  ImagePNG($hImage);
  ImageDestroy($hImage);
?>
Avatar billede coderdk Praktikant
15. september 2006 - 14:23 #1
Jeg tror det er fordi du skal angive en fontfil, ikke et fontnavn. Upload arial.ttf til samme folder som scriptet... Her er et eksempel der centrerer en skrå tekst midt i billedet:

    $size = 12;
    $angle = 25;
    $font = 'arial.ttf';
    $text = 'This is great';

    $im = imagecreate( 800, 800 );
    $bbox = imagettfbbox( $size, $angle, $font, $text );
    $bgcol = imagecolorallocate( $im, 255, 255, 255 );
    $txtcol = imagecolorallocate( $im, 0, 0, 0 );
    imagefill( $im, 1, 1, $bgcol );
    imagerectangle( $im, 0, 0, 799, 799, $txtcol );
    $posX = ( 800 - $bbox[2] ) / 2;
    $posY = ( 800 - $bbox[1] ) / 2;
    imagettftext( $im, $size, $angle, $posX, $posY, $txtcol, $font, $text );

    header( 'Content-Type: image/png' );
    imagepng( $im );
    imagedestroy( $im );
Avatar billede coderdk Praktikant
15. september 2006 - 14:30 #2
Bredden er altså med andre ord i $bbox[2] og højden i $bbox[1]... :)

I virkeligheden må centeret være:

    $posX = ( 800 - $bbox[0] - $bbox[2] ) / 2;
    $posY = ( 600 - $bbox[7] - $bbox[1] ) / 2;
Avatar billede sjh Nybegynder
15. september 2006 - 14:38 #3
Nej nej.. jeg skal ikke center noget.. og det har ikke noget med fontfil af gøre jeg kan godt se teksten.. man placering af teksten kan jeg ikke få til at virke..

  $Top = $Array[?];
  $Left = $Array[?];
  $Width = $Array[?];
  $Height = $Array[?];

Top = vil jeg antag var 0 men så kan jeg ikke se teksten
Left = den passer næsten med 0 dog ikke når jeg dreje teksten
Width/Height  = den højde/brede som billede skal have for at teksten kan stå i det
Avatar billede sjh Nybegynder
15. september 2006 - 14:39 #4
godt se teksten.. mEn placering
Avatar billede sjh Nybegynder
15. september 2006 - 14:42 #5
den skal selv lave WIDTH og HEIGHT så det passer med teksten..
Avatar billede coderdk Praktikant
15. september 2006 - 14:44 #6
$Height = $Array[7] - $Array[1];
$Width = $Array[0] - $Array[2];

Hvor vil du placere teksten?
Avatar billede coderdk Praktikant
15. september 2006 - 14:47 #7
Du vil tilpasse billedets størrelse til teksten?
Avatar billede coderdk Praktikant
15. september 2006 - 14:47 #8
Det er jo det du vil, kan jeg se :D Hold on!
Avatar billede sjh Nybegynder
15. september 2006 - 14:48 #9
JA...
Avatar billede coderdk Praktikant
15. september 2006 - 15:10 #10
Geez, havde glemt hvor underlig imagettfbbox er, det er jo relativ til teksten horizontalt :P

    $Width = abs( $Array[0] ) + abs( $Array[2] );
    $Height = abs( $Array[5] ) + abs( $Array[1] );
    $Left = abs( $Array[0] );
    $Top = abs( $Array[5] );

Det burde virke...
Avatar billede sjh Nybegynder
15. september 2006 - 15:15 #11
Jaaa.. den passer ikke helt når du kommer op over 40 i $Angle = 45, 50, 60, -45, -50, -60 osv..
Avatar billede sjh Nybegynder
15. september 2006 - 16:05 #12
Kan du få den til at passe.. eller har du opgivet det.. :D
Avatar billede coderdk Praktikant
15. september 2006 - 16:29 #13
Opgav at få det til at passe efter et par forsøg - Det er noget f*ck :)
Avatar billede coderdk Praktikant
15. september 2006 - 16:56 #14
Se om du kan få denne til at virke som du ønsker: http://www.danhendricks.com/code/PHP/Dynamic%20Font%20Generation/
Avatar billede sjh Nybegynder
15. september 2006 - 21:26 #15
det vil jeg da prøve at se på.. tak for hjælpen..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester