simenss Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 Jeg bruker koden under til å lage et bilde med tekst. Men når teksten blir for lang, så går den utenfor bildet! Hvordan kan jeg få tekststørrelsen til å variere etter størrelsen på bildet? F.eks. hvis bildet er 128 px brett og 128 px høyt, så må skiftens størrelse tilpasse seg så den er f.eks. 90% av bildets bredde. Noen som skjønner? <?php // Set some test variables $font = "arial.ttf"; $text = "Denne teksten er for lang for bildet!"; $size = 10; $angle = 0; // Create an image and fill the background with lightgray $image = imagecreatetruecolor(128, 128); imagefill($image, 0, 0, hexdec("dddddd")); // Make a cross to make it easier to analyze /* imageline($image, 0, 0, imagesx($image), imagesy($image), hexdec("000000")); imageline($image, imagesx($image), 0, 0, imagesy($image), hexdec("000000")); */ // Run a fixed version of imagettfbbox() $bbox = imagettfbbox_fixed($size, $angle, $font, $text); // Make some text and center the text on the image. // imagettftext() pivot is on lower left imagettftext($image, $size, $angle, imagesx($image) / 2 - $bbox['width'] / 2, imagesy($image) / 2 + $bbox['height'] / 2, hexdec("0000ff"), $font, $text); // Show the image imagejpeg($image); function imagettfbbox_fixed($size, $angle, $font, $text) { // Get the boundingbox from imagettfbbox(), which is correct when angle is 0 $bbox = imagettfbbox($size, 0, $font, $text); // Rotate the boundingbox $angle = pi() * 2 - $angle * pi() * 2 / 360; for ($i=0; $i<4; $i++) { $x = $bbox[$i * 2]; $y = $bbox[$i * 2 + 1]; $bbox[$i * 2] = cos($angle) * $x - sin($angle) * $y; $bbox[$i * 2 + 1] = sin($angle) * $x + cos($angle) * $y; } // Variables which tells the correct width and height $bbox['width'] = $bbox[0] + $bbox[4]; $bbox['height'] = $bbox[1] - $bbox[5]; return $bbox; } ?> Lenke til kommentar
???????? Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 Mål størrelsen med imagettfbox() www.php.net/imagettfbbox Lenke til kommentar
simenss Skrevet 11. mai 2004 Forfatter Del Skrevet 11. mai 2004 (endret) Mål størrelsen med imagettfbox() www.php.net/imagettfbbox Har satt meg inn i imagettfbbox() nå. Mulig jeg er dum, men skjønner ikke hvordan dette skal hjelpe meg. X og Y på bilder er veldig nytt for meg, så kanskje det er noe jeg må skjønne? Prøvde koden under, og fikk opp noen tall. Hva sier disse meg egentlig? Takk for all hjelp <?php $array = imagettfbbox(100, 0, "arial.ttf", "Arial"); print $array[0]; print ", "; print $array[1]; print ", "; print $array[2]; print ", "; print $array[3]; print ", "; print $array[4]; print ", "; print $array[5]; print ", "; print $array[6]; print ", "; print $array[7]; ?> EDIT: Det jeg fikk opp var: -3, 2, 257, 2, 257, -97, -3, -97 Endret 11. mai 2004 av simenss Lenke til kommentar
???????? Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 Les kommentarene til funksjonen <?phpfunction fixbbox($bbox) { $xcorr=0-$bbox[6]; //northwest X $ycorr=0-$bbox[7]; //northwest Y $tmp_bbox['left']=$bbox[6]+$xcorr; $tmp_bbox['top']=$bbox[7]+$ycorr; $tmp_bbox['width']=$bbox[2]+$xcorr; $tmp_bbox['height']=$bbox[3]+$ycorr; return $tmp_bbox; } ?> Lenke til kommentar
simenss Skrevet 11. mai 2004 Forfatter Del Skrevet 11. mai 2004 Får bare prøve meg litt fram, men tusen takk Lenke til kommentar
bfreddy Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 (endret) Les kommentarene til funksjonen <?phpfunction fixbbox($bbox) { $xcorr=0-$bbox[6]; //northwest X $ycorr=0-$bbox[7]; //northwest Y $tmp_bbox['left']=$bbox[6]+$xcorr; $tmp_bbox['top']=$bbox[7]+$ycorr; $tmp_bbox['width']=$bbox[2]+$xcorr; $tmp_bbox['height']=$bbox[3]+$ycorr; return $tmp_bbox; } ?> Hvordan bruker man denne koden for å utføre den jobben simenss vil at den skal gjøre? Er ganske grønn i PHP, så takk hvis noen kan svare edit: kom du fram til noe simenss? Endret 12. mai 2004 av bfreddy Lenke til kommentar
???????? Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 Ved bruk av den funksjonen kan du lage et script som dette: $bredde = 50; // angi bredden på bildet while($størrelse != true){ $i++; $bildet = fixbbox(imagettfbbox($i,0,"arial.ttf","teksten")); if($bildet['width'] > $bredde){ $størrelse = true; $i--; } } Da vil $i være den største størrelsen teksten kan være uten at den går utenfor bildet. Har ikke testet scriptet så det kan hende det må endres litt, og det kan helt sikkert effektiviseres - spesielt med tanke på at man kan ta bort funksjonen og heller skrive den rett inn i scriptet. Lykke til Lenke til kommentar
simenss Skrevet 12. mai 2004 Forfatter Del Skrevet 12. mai 2004 Takk for hjelpen, enda en gang ???????? Hvis noen er interessert i koden jeg kom fram til så er den: <?php // Set some test variables $font = "comic.ttf"; $text = "Denne teksten er for lang for bildet!"; $angle = 0; function fixbbox($bbox) { $xcorr=0-$bbox[6]; //northwest X $ycorr=0-$bbox[7]; //northwest Y $tmp_bbox['left']=$bbox[6]+$xcorr; $tmp_bbox['top']=$bbox[7]+$ycorr; $tmp_bbox['width']=$bbox[2]+$xcorr; $tmp_bbox['height']=$bbox[3]+$ycorr; return $tmp_bbox; } $bredde = 128; // angi bredden på bildet while($størrelse != true){ $i++; $bildet = fixbbox(imagettfbbox($i,0,$font,$text)); if($bildet['width'] > $bredde) { $størrelse = true; $i--; } } // Create an image and fill the background with lightgray $image = imagecreatetruecolor(128, 128); imagefill($image, 0, 0, hexdec("dddddd")); // Run a fixed version of imagettfbbox() $bbox = imagettfbbox_fixed($i, $angle, $font, $text); // Make some text and center the text on the image. // imagettftext() pivot is on lower left imagettftext($image, $i, $angle, imagesx($image) / 2 - $bbox['width'] / 2, imagesy($image) / 2 + $bbox['height'] / 2, hexdec("0000ff"), $font, $text); // Show the image imagejpeg($image); function imagettfbbox_fixed($i, $angle, $font, $text) { // Get the boundingbox from imagettfbbox(), which is correct when angle is 0 $bbox = imagettfbbox($i, 0, $font, $text); // Rotate the boundingbox $angle = pi() * 2 - $angle * pi() * 2 / 360; for ($i=0; $i<4; $i++) { $x = $bbox[$i * 2]; $y = $bbox[$i * 2 + 1]; $bbox[$i * 2] = cos($angle) * $x - sin($angle) * $y; $bbox[$i * 2 + 1] = sin($angle) * $x + cos($angle) * $y; } // Variables which tells the correct width and height $bbox['width'] = $bbox[0] + $bbox[4]; $bbox['height'] = $bbox[1] - $bbox[5]; return $bbox; } ?> Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå