webForumDet fria alternativet

Skapa en gif-bild

PHP

29 svar · 1 146 visningar · startad av learn

Medlem sedan jan. 20051 130 inlägg
Frågan#1

Gokväll!

Jag har sökt runt här på wF utan att hitta riktigt vad jag är ute efter...

Vad jag vill ha är ett enkelt php-script som skapar en gif-bild-fil innehållande text.

Exempel: Användaren matar in sitt namn "Anders" och en fil med namnet anders.gif skapas i angiven katalog. Gärna transparent bakgrund.

Någon som kan hjälpa mig..?

Medlem sedan apr. 20012 427 inlägg
#2

http://www.hotscripts.com/Detailed/52111.html

Det var det första jag hittade, men det finns säkert fler.

Medlem sedan jan. 20051 130 inlägg
#3

Men om man vill spara bilden...?

RED:
När användaren matar in sitt namn i ett formulär så ska bilden skapas i en mapp för att senare visas.

Medlem sedan jan. 20051 130 inlägg
#4

Någon som ngt tips/script?? Tack på förhand!

Medlem sedan sep. 200542 inlägg
#5

Prova ändra raden

imagegif($image);

till

imagegif($image, "$text.gif");
Medlem sedan jan. 20051 130 inlägg
#6

Funkar inte... Inget händer. Hur ska jag "anropa" scriptet. Så här ser det ut:

	
$text = $_POST["namn"];
$font = "verdana.ttf";
$getsize = 8;
$size = imagettfbbox($getsize+1, 0, $font, $text);
$image = imagecreatetruecolor(abs($size[2]) + abs($size[0]), abs($size[7]) + abs($size[1]));

if (!isset($_GET["color"])) $gold = imagecolorallocate($image, 206, 20, 20);
		else $gold = imagecolorallocate($image, 177, 177, 177);

$back = ImageColorAllocate($image,255,255,255);
ImageFilledRectangle($image,0,0,302,20,$back);
imagettftext($image, $getsize, 0, 0, $getsize+2, $gold, $font, $text);

header("Content-type: image/gif");
imagegif($image, "$text.gif"); 
imagedestroy($image);

Hur ska jag använda koden?

Medlem sedan sep. 200542 inlägg
#7

Här är ett exempel, hoppas det gör det tydligare:

<html>
<body>
<form method="post" action="#">
	<input type ="text" name="namn" value="Din bildtext"/>
	<input type="submit" value="Skapa bild" />
</form>
<?php

if(isset($_POST["namn"])) {

	$text = $_POST["namn"];
	$font = "verdana.ttf";
	$getsize = 8;
	$size = imagettfbbox($getsize+1, 0, $font, $text);
	$image = imagecreatetruecolor(abs($size[2]) + abs($size[0]), abs($size[7]) + abs($size[1]));

	if (!isset($_GET["color"])) $gold = imagecolorallocate($image, 206, 20, 20);
	        else $gold = imagecolorallocate($image, 177, 177, 177);
	
	$back = ImageColorAllocate($image,255,255,255);
	ImageFilledRectangle($image,0,0,302,20,$back);
	imagettftext($image, $getsize, 0, 0, $getsize+2, $gold, $font, $text);

	//header("Content-type: image/gif");
	imagegif($image, "$text.gif");
	imagedestroy($image); 

	print '<img src="'.$_POST["namn"].'" alt="testbild" />';

}

?>
</body>
</html>
Medlem sedan jan. 20051 130 inlägg
#8

Hmm, får detta resultat lokalt:

Fatal error: Call to undefined function: imagettfbbox() in C:\Documents and Settings\Daniel Westman\Mina dokument\Webbutveckling\hem-sidan\txtpic.php on line 15

och detta online:

Warning: imagegif() [function.imagegif]: Unable to open 'Test.gif' for writing in /home/web/domains/hej.se/public_html/txtpic.php on line 26
testbild

Medlem sedan jan. 20051 130 inlägg
#9

Löste sig på servern, det visade sig att jag inte hade 777 på mappen... Men varför fungerar det inte lokalt??

PS. Varför blir det så fruktansvärt dålig kvalitet på bilden...??

Medlem sedan jan. 20051 130 inlägg
#10

En tilläggsfråga, hur gör jag för att få "bg.gif" som bakgrund till texten?

Medlem sedan sep. 200542 inlägg
#11

Vet ej, tyvärr. Kanske någon annan som kan mer kan hjälpa dig.

Medlem sedan juli 20023 617 inlägg
#12

learn skrev:

En tilläggsfråga, hur gör jag för att få "bg.gif" som bakgrund till texten?

Ta en titt på imagecreatefromgif (http://se2.php.net/manual/sv/function.imagecreatefromgif.php) om det kan vara något.

Medlem sedan juli 20023 617 inlägg
#13

Hittade just detta:

imageSetTile($image,$imageBack);
imagefill($image,0,0,IMG_COLOR_TILED);

Bilden $image fylls med bilden $imageBack.

Har inte provat själv...

Medlem sedan jan. 20051 130 inlägg
#14

Ok, vart och hur ska jag stoppa in detta i koden ovan?

Medlem sedan juli 20023 617 inlägg
#15

learn skrev:

Ok, vart och hur ska jag stoppa in detta i koden ovan?

Innan du skriver ut texten på bilden.

Medlem sedan jan. 20051 130 inlägg
#16

Jag känner mig lite bakom flötet just nu, kan du skriva ett litet exempel med hela koden som RogerA bifogade ovan...? Tack!

Medlem sedan juli 20023 617 inlägg
#17

Som sagt har jag inte testat detta. Berätta hur det går.
Se till att sätta rätt sökväg till "bg.gif"

<html> 
<body> 
<form method="post" action="#"> 
    <input type ="text" name="namn" value="Din bildtext"/> 
    <input type="submit" value="Skapa bild" /> 
</form> 
<?php 

if(isset($_POST["namn"])) { 

    $text = $_POST["namn"]; 
    $imageback = "bg.gif";
    $font = "verdana.ttf"; 
    $getsize = 8; 
    $size = imagettfbbox($getsize+1, 0, $font, $text); 
    $image = imagecreatetruecolor(abs($size[2]) + abs($size[0]), abs($size[7]) + abs($size[1])); 

    if (!isset($_GET["color"])) $gold = imagecolorallocate($image, 206, 20, 20); 
            else $gold = imagecolorallocate($image, 177, 177, 177); 
     
    //$back = ImageColorAllocate($image,255,255,255); 
    //ImageFilledRectangle($image,0,0,302,20,$back); 
    $tile = imagecreatefromgif($imageback);
    imageSetTile($image,$tile); 
    imagefill($image,0,0,IMG_COLOR_TILED);
    imagettftext($image, $getsize, 0, 0, $getsize+2, $gold, $font, $text); 

    //header("Content-type: image/gif"); 
    imagegif($image, "$text.gif"); 
    imagedestroy($image); 

    print '<img src="'.$_POST["namn"].'" alt="testbild" />'; 

} 

?> 
</body> 
</html>
Medlem sedan jan. 20051 130 inlägg
#18

Hmm..

Warning: imagesettile(): supplied argument is not a valid Image resource in /home/web/domains/hej.se/public_html/test/txtpic.php on line 24

Rad 24: imageSetTile($image,$imageback);

Medlem sedan juli 20023 617 inlägg
#19

Ändrade i koden lite. Försök igen.

Medlem sedan jan. 20051 130 inlägg
#20

Det funkar fint! Men när jag väljer font-storleken 20 så hamnar delar av texten utanför... Kan man sätta en fast höjd på bilden kanske? Sen så vill jag ha en maxbredd, bilden får inte bli bredare än 300px.

Tack för din hjälp! :bire

273 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)