Een poster maken d.m.v. GD libary

Status
Niet open voor verdere reacties.

martijntju30

Gebruiker
Lid geworden
23 jun 2010
Berichten
32
Hoi allemaal,

Ik wil op mijn site in het beheerpaneel alle beheerders posters kunnen laten maken. Ik wil dit als volgt doen:
1. Een formulier invullen waarin je de tekst geeft, en 1 plaatje.
2. GD libary zorgt er dan voor dat de tekst op de juiste plaats in het plaatje wordt gezet
3. En tot stot het plaatje weergeven

Dit zou moeten kunnen met GD Libary.
MAAR, daar zit mijn probleem. Ik heb verschillende tutorials bekeken, gezocht op google en alle tutorials werken niet (of niet bij mij) en zijn ook zo oud dat reageren daar geen zin heeft. Daarom deze vraag.

Nu is het niet: Dit wil ik, maken jullie het script?

Ik ben zo ver gekomen:
PHP:
//Wat hier voor staat maak niet uit..
<div id="hulslinksonder">
   <p><?php
   $pagina = $_GET['p'];

   if (($pagina) == "poster") {
             if (isset($_POST['uitvoeren']))
             {
$fouten    =    array(); //array voor fouten starten

        if(empty($_POST['kop'])) //Kop checken
            {
                $fouten[]    =    'Je moet wel een kop invullen'; //wanneer kop leeg is
            }
        elseif(empty($_POST['alinea'])) //Alinea checken
            {
                $fouten[]    =    'Je moet wel een eerste invullen'; //wanneer eerste alinea leeg is
            }
        elseif(empty($_POST['tekst'])) //tekst checken
            {
                $fouten[]    =    'Je moet wel een tekst invullen'; //wanneer tekst leeg is
            }

    if(count($fouten) == 0) //wanneer er 0 fouten zijn
        {
     echo "<p>Er zijn geen fouten gevonden<br /><br />
     Nu moet de poster te zien zijn en op te slaan en/of te printen.</p>";
     
     
     /*Hier zit het probleem: Het plaatje maken*/

     echo "<p><br />
       <br />
       Klik <a href='http://www.geldersweer.nl/bronkerk/pics/folders/poster_leeg.jpg'>hier</a> voor gewoon de lege poster<br />
       <br />
       En klik <a href='javascript:history.go(-1);'>hier</a> om terug te gaan naar de bewerk pagina voor de poster als deze poster niet goed is.</p>";
    }
  else //wanneer er wel fouten zijn
        {
        ?>
<table>
  <tr>
    <td>
    <?php
    for($i = 0; $i < count($fouten); $i++) //for lus die fouten telt
        {
            echo '<p> - '.$fouten[$i].'</p><br />'; //fouten weergeven
        }
    ?>
    <p>Klik <a href="javascript:history.go(-1);">hier</a> om terug te gaan naar de bewerk pagina en de fouten te verbeteren.</p>
    </td>
  </tr>
</table>
<?php
        }
    }
else {
                 ?>
                 <form method='post' action='indexfolders.php?p=poster'>
                 <table border='0' width='575'>
                 <tr>
                 <td><div id="nieuwsbar">Typ hier je kop: </div></td><td><input name="kop" size='30'></td>
                 </tr>
                 <tr>
                 <td><div id="nieuwsbar">Geef hier een plaatje op:(URL) </div></td><td><input name="plaatje" size='30'></td> <!--<input type="hidden" name="MAX_FILE_SIZE" value="1000000" /><input name="userfile" type="file">-->
                 </td>
                 <tr>
                 <td><div id="nieuwsbar">Typ hier je eerste alinea: </div></td><td><textarea name="alinea" rows='5' cols='30'></textarea></td>
                 </tr>
                 <tr>
                 <td><div id="nieuwsbar">Typ hier je uitgebreide tekst: </div></td><td><textarea name="tekst"rows='5' cols='40'></textarea></td>
                 </tr>
                 <tr>
                 <td colspan='2'><input type="submit" name="uitvoeren" value="Uitvoeren"></td>
                 </tr>
                 </table>
                 </form>

             <?php
}
       echo "<p><br />
       <br />
       Klik <a href='http://www.geldersweer.nl/bronkerk/pics/folders/poster_leeg.jpg'>hier</a> voor gewoon de lege poster</p>";
   }
   else {

   switch ($pagina){
       case "folder":
       echo "Klik <a href='http://www.geldersweer.nl/bronkerk/pics/folders/folder_voorkant.jpg'>hier</a> voor de voorkant van de folder<br />en <a href='http://www.geldersweer.nl/bronkerk/pics/folders/folder_achterkant.jpg'>hier</a> voor de achterkant.<br />
       Je kan de folder niet bewerken, als je fouten ziet mail je gewoon naar <a href='mailto:moldavie@live.nl'>mij</a>";
       break;
       case "cadeaulabel":
       echo "Klik <a href='http://www.geldersweer.nl/bronkerk/pics/folders/cadeaulabel.jpg'>hier</a> voor de cadeaulabel, deze kan je op de pakketjes plakken maar ook op een potje honing.";
       break;
       case"":
       echo"Kies rechts welke folder je wil zien!";
       break;
}
}
   ?></p>

           </div>
//En wat hierna komt maak ook niet uit...

Zoals jullie kunnen zien moet ik alleen nog het deel van de GD libary.(regel 27-31) Kan iemand mij hiermee helpen. (eerst de code voorkauwen en daarna uitleggen vind ik ook prima, maar ik wil het wel graag zelf ook kunnen anders dan heb ik er niets aan.

Alvast bedankt!


PS: Dit zijn de scripts die ik van internet heb gehaald maar a) niet goed snap en b) niet werken:
PHP:
<?php
//de tekst uit je URL halen, kun je eventueel weg laten en bij $text gewoon $_GET['tekst'] zetten.
$tekst = addslashes($_GET['tekst']);
$image = addslashes($_GET['img']);
//aangeven dat het om een plaatje gaan d.m.v. een header (LET OP: ik heb PNG gebruikt voor betere kwaliteit!! het werkt dus WEL)


if (!file_exists($image)){
  die ("Unknown image file");
}

//Geef het plaatje aan waar dat de tekst in moet komen (kun je evt. uit database of URL halen, maar zorg ervoor dat het plaatje op je host staat!)
//het plaatje MOET .jpg of .jpeg zijn, voor andere extensies zie php.net
$extension = explode(".", $image);
$extension = strtolower(end($extension));

switch ($extension){

  case 'jpg':
    $im = imagecreatefromjpeg($image);
  break;
  case 'jpeg':
    $im = imagecreatefromjpeg($image);
  break;
  case 'gif':
    $im = imagecreatefromgif($image);
  break;
  case 'bmp':
    $im = imagecreatefrombmp($image);
  break;
  default:
    die("Unknown filetype");
  break;

}

header('Content-type: image/png');

$c = imagecolorallocate($im, 0, 0, 0); //kleur zwart

if (isset($_GET['txtcolor'])){
  $colorArray = Array ("white" => "FFFFFF", "black" => "000", "grey" => "808080");

  if (isset($colorArray[strtolower(addslashes($_GET['txtcolor']))]))
    $a = $colorArray[strtolower(addslashes($_GET['txtcolor']))];
  else
    $a = addslashes($_GET['txtcolor']);

  $hexArray = sscanf('#'.$a, '#%2x%2x%2x');
  $c = imagecolorallocate($im, $hexArray[0], $hexArray[1], $hexArray[2]);
}

//eventueel een vierkantje, dan moet je de dubbel slash voor de volgende regel weg halen.
//imagefilledrectangle($im, 0, 0, 399, 29, $white);

//Het lettertype, let op dat deze zich op je host MOET bevinden.
$font = 'tahoma.ttf';

//De originele tekst, in het zwart. en de positie ervan.
imagefttext($im, 20, 0, 5, 25, $c, $font, $tekst);

//Gebruik imagepng() voor een mooier en duidelijker resultaat van je plaatje!!
imagepng($im); //output
//verwijder de afbeelding weer om plaats op je host te behouden.
imagedestroy($im);
?>
HTML:
<img src="create_img.php?tekst=Hello%20World&img=plaatje.jpg&txtcolor=00FFFF" alt="plaatje" />
 
hallo,

Ik zie zo snel geen fouten in je voorbeeld, weet je zeker dat je het font bestand (tahoma.ttf) op de goede plek op je host hebt staan? en krijg je geen fout meldingen?

verder ben ik voorstander van het zelf ontdekken, probeer dit eens. Als het niet lukt zijn we hier om je te helpen.

op deze pagina van php.net staat een voorbeeld hoe je een afbeelding kunt inladen en er dan een watermark op kan zetten. als je die een beetje aanpast kun je er ipv een watermark tekst neer zetten.
voor de tekst kun je gebruik maken van de functie imagegettftext() (zie php.net)
zoiets:
PHP:
<?php
// Load the stamp and the photo to apply the watermark to
$im = imagecreatefromjpeg('photo.jpeg');

// Set the margins for the stamp and get the height/width of the stamp image
$marge-kop_left = 10;
$marge-kop_top = 10;

// hier de code voor de tekst (ik zou eerst beginnen met alleen de kop)

// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

ik moet je wel waarschuwen dat het misschien niet zo makkelijk is als je denkt, de tekst gaat namelijk niet automatisch naar de volgende regel als het uit de afbeelding loopt en je moet de hoogtes instellen voor elk blokje tekst en omdat je niet weet hoe hoog een blok tekst is, is dat best ingewikkeld.

succes, Ecross
 
Hoi,

Ik heb deze code ook gebruikt. Ik heb het lettertype op de host staan. Ik heb het plaatje er staan, alles natuurlijk in de zelfde map... maar hij geeft geen plaatje weer.........:confused:

Dus ik heb even zitten denken... Ik maak gewoon een tabel met het plaatje als achtergrond en de tekst wordt dan gewoon in de tabel gezet. Dan in een pop up venster weergeven. Dan hoef je alleen nog maar shift + prt sc te doen en dan heb je hem ook, alleen dan veel minder ingewikkelt... Ik zal de code als het werkt nog wel posten.

Of hebben jullie hier andere ideeën over??

Alvast bedankt!
 
als je server op windows draait kun je de imagegrabscreen() functie gebruiken, maar verreweg de meeste servers draaien op een linux distributie.
Anders heb je misschien nog wet wat aan deze ehow tut maar die lijkt me op het eerste gezicht vrij ingewikkeld.

succes
 
Bedoel je met dat het op windows draait dat het alleen dan werkt of dat als de PC op windows draait. Dat eerste lijkt me logisch, en dat zou dus betekenen dat als het bij mij werkt dat het bij iedereen zou moeten werken?

Alvast bedankt!

PS ik ga die tut nog wel lezen, maar eerst huiswerk;)
 
jouw website staat (net als die van iedereen) op een server, dat is (een groep van) computers die aan het internet verbonden zijn. Deze computers hebben ook (een aangepast) besturingssysteem nodig. Zoals ik al zei draaien de meeste server op (een distributie van) linux. Dit heeft zo zijn voor en na delen.

de imagegrabscreen() functie werkt dus alleen op een windows server.

succes met die tut en je huiswerk :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan