Avatar billede krudtso Nybegynder
15. september 2008 - 21:42 Der er 4 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 jakobdo Ekspert
15. september 2008 - 21:52 #1
Måske noget ala:

http://dk.php.net/imagettftext -> s.pynenburg _at_ gm ail dotcom - 07-Aug-2008 04:31
Avatar billede krudtso Nybegynder
15. september 2008 - 23:26 #2
Der er nogen problemmer emd det script så jeg desværre ikke kan bruge det, som han også selv pointere: Kun en gang linjeskift, og det er desværre ikke godt nok.
Avatar billede jakobdo Ekspert
16. september 2008 - 08:31 #3
Så skal du prøve at kigge på: http://dk.php.net/manual/en/function.imagettfbbox.php
Den kan give dig størrelsen af noget tekst.
Avatar billede krudtso Nybegynder
16. september 2008 - 11:05 #4
Har jeg også set på, men er ikke på så højt programmerings nevau til at jeg selv kan sammensætte et system, søger lidt en kode som jeg kan bruge.
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