webForumDet fria alternativet

GD förhandsgranskning

PHP

1 svar · 356 visningar · startad av pimpelon

Medlem sedan nov. 200554 inlägg
Frågan#1

Håller på å meckar ihop ett script som man i en textare ska kunna skriva en text och sen skrivs den ut direkt med GD.

Problemet är bara att det skrivs bara ut 1 rad.

Någon som har någon ide...

Sidan där allt görs:

<html>
<head>
    <title></title>
<script type="text/javascript">
function updatePreview() {
	txt_clean = document.getElementById('new_value_2').value;
	document.preview.src="write_text.php?font=" + "STENCILN" + "&text=" + txt_clean + "&bgcolor=" + "FFFFFF" + "&fontcolor=" + "000000" + "&type=" + "PNG";
}
</script>
</head>
<BODY onload="updatePreview();">
<img src="write_text.php?font=STENCILN&text=textimage&ds=0&dscolor=dddddd&size=70&bgcolor=FFFFFF&fontcolor=11bb77&type=PNG" name="preview" border="1">
<form>
<textarea name="new_value_2"  rows="4" cols="40" onChange="updatePreview()" onKeyUp="updatePreview()" size="12"></textarea>

</body>  
</HTML>

koden som skapar bilden:

<?php 

// ------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Textimage.php av Måns Jonasson - maila frågor till mans@thejonassons.com
// Använd såhär:
// <img src="textimage.php?type=PNG&text=text&bgcolor=ffffff&fontcolor=000000&dscolor=cccccc&fontsize=60&ds=1&font=arcade">
//
// Argumenten är:
// type = PNG/JPG/GIF -> vilken typ av bild som ska genereras. Alla typer funkar inte på alla servrar (framförallt är det GIF som inte funkar överallt)
// text = text -> vilken text som ska genereras.
// bgcolor = ffffff -> hexkod för bakgrundsfärgen som också görs transparent om det är en GIF/PNG.
// fontcolor = 000000 -> hexkod för färgen på texten.
// dscolor = cccccc -> hexkod för färgen på dropshadow
// fontsize = 60 -> storlek i pixlar på texten
// ds = 1 -> dropshadow. 0 ger ingen dropshadow, alla värden över 0 ger en, med olika avstånd på skuggan. Experimentera med värdet, börja med 1 och testa dig fram.
// font = arcade -> namn på .ttf-filen som ska användas för att skapa bilden. Tänk på att ange rätt absolut sökväg till din .ttf-fil i variabeln "path" nedan.
//
// Du kan ladda upp valfri TrueType-font till din katalog och använda dem för att skapa bilderna.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------

$path = 'C:/www/roligatrojor.com/dev/fonts/'; // OBS!!! Sätt till din egen absoluta path där din TTF-fil finns!

if (!$_GET['font']) { $font = "MICROGBE."; } // Default font är "arcade"
$usefont = $path . $font . '.ttf';

// Först hämtar vi in argumenten till variabler
$type = $_GET['type'];
$text = $_GET['text'];
$bgcolor = $_GET['bgcolor'];
$fontcolor = $_GET['fontcolor'];
$dscolor = $_GET['dscolor'];
$fontsize = $_GET['size'];
$ds = $_GET['ds'];

if (!$type) { $type = "PNG"; } // Default bildformat är PNG
if (!$text) { $text = "textimage"; } // Default text är "textimage"
if (!$bgcolor) { $bgcolor = "FFFFFF"; } // Default bakgrundsfärg är vit
if (!$fontcolor) { $fontcolor = "55cccc"; } // Default fontfärg är nån sorts grön
if (!$dscolor) { $dscolor = "229999"; } // Default dropshadow-färg är nån sorts mörkare grön
if (!$fontsize) { $fontsize = 32; } // Default fontsize är 32 pixlars höjd
if (!$ds) { $ds = 0; } // Default dropshadow är 1

// Konvertera hex-värden till decimala värden på ett enkelt sätt...
$bg1 = hexdec(substr($bgcolor,0,2));
$bg2 = hexdec(substr($bgcolor,2,2));
$bg3 = hexdec(substr($bgcolor,4,2));

$fc1 = hexdec(substr($fontcolor,0,2));
$fc2 = hexdec(substr($fontcolor,2,2));
$fc3 = hexdec(substr($fontcolor,4,2));

$ds1 = hexdec(substr($dscolor,0,2));
$ds2 = hexdec(substr($dscolor,2,2));
$ds3 = hexdec(substr($dscolor,4,2));

// Beräkna hur stor bilden ska vara
$imgsize = imagettfbbox($fontsize, 0, $usefont, $text);

$dx = max($imgsize[2], $imgsize[4]) - min($imgsize[0], $imgsize[6]); // extreme x
$dy = max($imgsize[1], $imgsize[3]) - min($imgsize[5], $imgsize[7]); // extreme y

// Skapa bilden och färgpaletten
$img = imagecreate($imgsize[2]*1.05, abs($imgsize[5])*1.4); 
$bgcolor = imagecolorallocate($img,$bg1,$bg2,$bg3); 
$fontcolor = imagecolorallocate($img,$fc1,$fc2,$fc3); 
$dscolor = imagecolorallocate($img,$ds1,$ds2,$ds3); 

imagefill($img,0,0,$bgcolor); 

// Gör bilden transparent och interlaced
imagecolortransparent ($img, $bgcolor);
imageinterlace($img, 1);

// Beräkna dropshadow
$dsfactor = 0.02 * $ds;

// Lägg in ev. dropshadowtext först, sen själva texten
if ($ds) {Imagettftext($img, $fontsize,0,2+$fontsize * $dsfactor,abs($imgsize[5])+$fontsize * $dsfactor,$dscolor,$usefont,$text);}
Imagettftext($img, $fontsize,0,2,abs($imgsize[5]),$fontcolor,$usefont,$text);

// Generera bilden efter respektive valt format

if ($type == "PNG") {
	Header("Content-type: image/png");
    ImagePNG($img);
  }
elseif ($type == "JPG") {
    Header("Content-type: image/jpeg");
    ImageJPEG($img, "", 80); // Kvaliteten är satt till 80, ska vara ett värde mellan 0-100
  }
elseif ($type == "GIF") {
	Header("Content-type: image/gif");
	ImageGIF($img);
	}

// Slut på det roliga
?>
Medlem sedan nov. 200554 inlägg
#2

Skrev om hela scriptet och fick till det..

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)