Avatar billede krudtso Nybegynder
24. september 2008 - 16:54 Der er 2 kommentarer

Tekst i billede, med auto linjeskift

Hej jeg er igang med et større projekt kaldet "Rush" indtil videre. Det er et kortspil, som man skal kunne printe og spille, men nok om det.

Mit egentlige problem er fordi, jeg har arbejdet på en kort generator, som ud fra et template billede, prober tekst ind i billedet. Det fungere fint nok, men jeg har nogle enkelte steder hvor jeg gerne vil have den til automatisk at skifte linje, når teksten overskrider en bestemt bredde (pixels).

Dette er koden jeg bruger, og indtil videre bruger jeg et wrap system som skifter linje efter antal tegn, men det virker ikke altid lige godt.

[code]
<?php

// Indictaes that the php file is a picture
header("Content-type: image/png");

// The info of the card
$navn = $_POST['name'];
$atk = $_POST['atk'];
$def = $_POST['def'];
$lvl = $_POST['lvl'];
$type = $_POST['type'];
$web = "Rush PCG            www.munkbusiness.dk/rush";
$artist = $_POST['artist'];
$serial = $_POST['serial'];
include("break.php");
$text_field = $_POST['effect'];
$flavor_text = $_POST['flavor_text'];

//word wrap
$warptext = wordwrap($text_field, 56, "\n");
$warptext_flavor = wordwrap($flavor_text, 56, "\n");


if (empty($_POST['picture'])) {
    $_POST['picture']='test_illustration';
}

// The template we put the info into
$im    = imagecreatefrompng("template.png");
$art    = imagecreatefrompng($_POST['picture'] . ".png");



// Text color
$orange = imagecolorallocate($im, 0, 0, 0);
$light_grey = imagecolorallocate($im, 140, 140, 140);

// Text font
$font  = "biondi.ttf";
$font2  = "biondi light.ttf";
$font_times  = "times.ttf";
$font_times_i  = "timesi.ttf";

// All the info is printed on the image
ImageTTFText ($im, 14, 0, 20, 37, $orange, $font, $navn);
ImageTTFText ($im, 12, 0, 312, 425, $orange, $font, $atk);
ImageTTFText ($im, 12, 0, 312, 448, $orange, $font, $def);
ImageTTFText ($im, 12, 0, 312, 470, $orange, $font, $lvl);
ImageTTFText ($im, 11, 0, 20, 54, $orange, $font2, $type);
ImageTTFText ($im, 9, 0, 20, 488, $orange, $font, $web);
ImageTTFText ($im, 10, 0, 20, 326, $light_grey, $font_times, "Illustrator: " . $artist);
ImageTTFText ($im, 10, 0, 292, 326, $light_grey, $font_times, $serial);
ImageTTFText($im, 10, 0, 20, 348, $orange, $font_times, $warptext);
ImageTTFText($im, 10, 0, 20, 454, $orange, $font_times_i, $warptext_flavor);
    // Tallene i parentesen herover betyder:
    // Første tal efter im = fontstørrelse i px
    // 2. tal efter im = rotation i grader
    // 3. tal efter im = afstand i px fra venstre billedkant til tekst
    // 4. tal efter im = afstand i px fra billedtop til tekstlinje
   
imagecopy($im, $art, 17, 64, 0, 0, 316, 245);

imagepng($im);
imagedestroy($im);
imagedestroy($art);

?>
[/code]

Tak for hjælpen på forhånd
Avatar billede michael_stim Ekspert
24. september 2008 - 16:59 #1
Hvorfor virker det ikke? Er det fordi der er lange ord?
$warptext = wordwrap($text_field, 56, "\n", true);
$warptext_flavor = wordwrap($flavor_text, 56, "\n", true);
Avatar billede krudtso Nybegynder
24. september 2008 - 18:40 #2
Ja netop, nogen gange går ordet ud over kanten, men hvis jeg minsker antallet af tegn til lige præcis den sætning, så vil andresætninger have et kæmpe hvidt felt hvor der sagtens kunne have stået ngoet, derfor vil jeg hellere have at den checker en bredde i pixel, og så laver den linjeskift ud fra det.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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