Avatar billede heavybreezer Nybegynder
19. september 2005 - 16:39 Der er 17 kommentarer

Lave billede udfra streng

Hey alle !

Jeg har nu længe ledt efter en funktion, som laver et billede med tekst, som er angivet i et tekstfelt.

Eksemelvis her: http://www.duermin.dk/?n=Hej

Der bruges ordet "Hej" fra adressen og laves ind i billedet, hvis i forstår ... ?

Hvordan går jeg det i php ? Tak
Avatar billede jakobdo Ekspert
19. september 2005 - 17:04 #1
Meget hurtigt eksempel:

<?php
if(isset($_GET['n'])
  $text = $_GET['n'];
else
  $text = "Test";
header("Content-type: image/png");
$im = @imagecreate(100, 50) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 255, 255, 255);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  $text, $text_color);
imagepng($im);
imagedestroy($im);
?>

Dette eksempel vil dog ikke passe til: domain.php?n=MEGETLANGTORDSOMBAREFORTSÆTTER
da billedet ikke er stort nok!
Men det kan man så igen kode sig ud af.
Avatar billede heavybreezer Nybegynder
19. september 2005 - 17:24 #2
Okay tak ! men hvor bliver stien til billedet hentet ?
Avatar billede jakobdo Ekspert
19. september 2005 - 17:35 #3
Billedet bliver lavet af PHP!
Vil du lægge teksten på et allerede eksisterende billede?
Avatar billede jakobdo Ekspert
19. september 2005 - 17:36 #4
Hvis ja, hvilken type er billedet?
Avatar billede heavybreezer Nybegynder
19. september 2005 - 17:37 #5
Jeps, det var det jeg ville :)

Det er et jpg billed.
Avatar billede jakobdo Ekspert
19. september 2005 - 17:41 #6
Test denne:

<?php

function LoadJpeg($imgname)
{
  $im = @imagecreatefromjpeg($imgname); /* Attempt to open */
  if (!$im) { /* See if it failed */
      $im  = imagecreate(150, 30); /* Create a blank image */
      $bgc = imagecolorallocate($im, 255, 255, 255);
      $tc  = imagecolorallocate($im, 0, 0, 0);
      imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
      /* Output an errmsg */
      imagestring($im, 1, 5, 5, "Error loading $imgname", $tc);
  }
  return $im;
}

$image = "ditBillede.jpg";

if(isset($_GET['n'])
  $text = $_GET['n'];
else
  $text = "Test";

header('Last-Modified: '.gmdate('D, d M Y H:i:s', $timestamp).' GMT');
header('Content-Type: image/jpeg');
$im = LoadJpeg($image);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  $text, $text_color);
imagejpeg($im);
imagedestroy($im);
?>
Avatar billede heavybreezer Nybegynder
19. september 2005 - 17:46 #7
Takker, men virker vist ikke ?

Jeg får fejlen "Parse error: parse error, unexpected T_VARIABLE in c:\apache\htdocs\image\index.php on line 20" på dette:

if(isset($_GET['n'])
  $text = $_GET['n'];
else
  $text = "Test";
Avatar billede jakobdo Ekspert
19. september 2005 - 17:46 #8
Jeg er slamkoder!
Ret:
if(isset($_GET['n'])
til:
if(isset($_GET['n']))
Avatar billede heavybreezer Nybegynder
19. september 2005 - 17:49 #9
:D hehe ! Det syns jeg nu ikke ...

Ikke for at strø salt i såret , men får ikke udskrevet et billede :)
Avatar billede jakobdo Ekspert
19. september 2005 - 18:05 #10
Se her: http://www.codebreaker.dk/exp/649278.php?n=Jakobdo

Og koden er her:
<?php

function LoadJpeg($imgname)
{
  $im = @imagecreatefromjpeg($imgname); /* Attempt to open */
  if (!$im) { /* See if it failed */
      $im  = imagecreate(150, 30); /* Create a blank image */
      $bgc = imagecolorallocate($im, 255, 255, 255);
      $tc  = imagecolorallocate($im, 0, 0, 0);
      imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
      /* Output an errmsg */
      imagestring($im, 1, 5, 5, "Error loading $imgname", $tc);
  }
  return $im;
}

$image = "649278.jpg";

if(isset($_GET['n']))
  $text = $_GET['n'];
else
  $text = "Test";

header('Last-Modified: '.gmdate('D, d M Y H:i:s', $timestamp).' GMT');
header('Content-Type: image/jpeg');
$im = LoadJpeg($image);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  $text, $text_color);
imagejpeg($im);
imagedestroy($im);
?>
Avatar billede jakobdo Ekspert
19. september 2005 - 18:06 #11
Hvor stort er det billede du tester med? (MB, og size eks. 640*480)
Avatar billede heavybreezer Nybegynder
19. september 2005 - 18:20 #12
Aah okay så virker det ! :)
Fejlen lagde i, at jeg sidder og tester på min egen apache server, og der er de funktioner åbenbart ikke defineret.

Hvordan forstører jeg teksten, ændrer font, og placering ? :)
Avatar billede jakobdo Ekspert
19. september 2005 - 19:09 #13
Kig på funktionen: www.php.net/imagestring
Alternativt kan du skrive med en hvilken som helst teksttype med denne funktion: www.php.net/imagettftext
Avatar billede heavybreezer Nybegynder
19. september 2005 - 19:51 #14
Okay mange tak !! Har kigget lidt rundt på www.php.net/imagettftext , men kan ikke få det til at virke i denne funkion. Jeg vil gerne eksempelvis bruge Comic Sans MS
Avatar billede jakobdo Ekspert
19. september 2005 - 19:58 #15
Du skal så huske at uploade filen: comic.ttf font-filen til mappen!
Avatar billede heavybreezer Nybegynder
19. september 2005 - 20:17 #16
Okay, har jeg så gjort nu. Skal jeg anvende:

$font = imageloadfont("comic.ttf");
imagestring($im, $font, 0, 0, "Hello", $black);

eller

$font = 'comic.ttf';
imagestring($im, $font, 0, 0, "Hello", $black);

?
Avatar billede jakobdo Ekspert
19. september 2005 - 20:27 #17
Det burde du kunne ja!
Som tidligere nævnt, så kig også på: imagettftext()
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