Avatar billede subhuman Nybegynder
06. juli 2004 - 09:33 Der er 8 kommentarer og
1 løsning

GD billede-text til fil/MySQL og ikke browser

Hej jeg har det her script der laver et output af den indtastede tekst som billede-fil,jeg ønsker at gemme billedet i en folder til senere brug og samtidig sætte billedets titel ind i en MySQL database - nogen ideer?

<?
if ($Submit){
//Header("Content-type: image/jpeg");
if(!isset($bgred)) $bgred=0;
if(!isset($bggreen)) $bggreen=51;
if(!isset($bgblue)) $bgblue=153;
if(!isset($chred)) $chred=255;
if(!isset($chgreen)) $chgreen=255;
if(!isset($chblue)) $chblue=255;
if(!isset($shadow)) $shadow="yes";
if(!isset($wrappos)) $wrappos=20;
if(!isset($crop)) $crop=2.2;
if(!isset($jpegquality)) $jpegquality=80;
if(!isset($s)) $s=11;
$savetext=$text;
$text=wordwrap($text,$wrappos,"\n\r",0);
if (!isset($font)) $fontname="font/LHANDW.TTF";
else
$fontname="font/".$font.".ttf";
$size = imagettfbbox($s,0,$fontname,$text);
$dx = abs($size[2]-$size[0]);
$dy = abs($size[5]-$size[3]);
$upper=abs($size[5]);
$under=$size[1];
$th=$upper-$under;
$xpad=9;
if (substr_count($text,chr(13))>=1)
{$mult=(substr_count($text,chr(13)));
$ypad=($mult*$crop*$s)+$s;
}
else $ypad=($crop-2)*$s;
$im = imagecreate($dx+$xpad,$th+$ypad);
$color = ImageColorAllocate($im, $bgred,$bggreen,$bgblue);
$black = ImageColorAllocate($im, 0,0,0);
$fontcolor = ImageColorAllocate($im, $chred,$chgreen,$chblue);
ImageRectangle($im,0,0,$dx+$xpad-1,$th+$ypad-1,$black);
ImageRectangle($im,0,0,$dx+$xpad,$th+$ypad,$white);
if ($shadow=="yes")
ImageTTFText($im, $s, 0, (int)($xpad/2)-2+1, $th+2+(int)($ypad/2)-3, $black, $fontname, $text);
ImageTTFText($im, $s, 0, (int)($xpad/2)-2, $th+2+(int)($ypad/2)-1-3, $fontcolor, $fontname, $text);
Imagejpeg($im,"",$jpegquality);
ImageDestroy($im);
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>New Page 1</title>
</head>

<body>

<form method="POST" action="">
<p>Text <input type="text" name="text" size="60"></p>
<p>size <input type="text" name="s" size="6" value="14"></p>
<p>word wrap break position
  <input type="text" name="wrappos" size="3" value="20">
</p>
<p>background color</p>
<p>red <input type="text" name="bgred" size="6" value="0">&nbsp;&nbsp;&nbsp; green <input
type="text" name="bggreen" size="8" value="51">&nbsp;&nbsp;&nbsp; Blue <input type="text"
name="bgblue" size="7" value="153"></p>
<p>Character color</p>
<p>red <input type="text" name="chred" size="6" value="255">&nbsp;&nbsp;&nbsp; green <input
type="text" name="chgreen" size="8" value="255">&nbsp;&nbsp;&nbsp; Blue <input type="text"
name="chblue" size="7" value="255"></p>
<p>font <input type="text" name="font" size="20" value="LHANDW">
</p>
<p>Shadow <input type="radio" value="yes" checked name="shadow">yes <input type="radio"
name="shadow" value="no">no</p>
<p>Crop size <input type="text" name="crop" size="20" value="2.2"></p>
<p>Jpeg quality (0-100) <input type="text" name="jpegquality" size="20" value="80"></p>
<p><input name="Submit" type="submit" id="Submit" value="Submit">
<input type="reset" value="Reset"
name="B2"></p>
</form>
</body>
</html>
Avatar billede googolplex Novice
06. juli 2004 - 09:42 #1
$folder = '/din/sti/til/filen.jpg';

Imagejpeg($im,$folder,$jpegquality);

Derefter kan du indsætte $folder i din database.

Prøv det.
Avatar billede subhuman Nybegynder
06. juli 2004 - 10:18 #2
Det ser rigtig fint ud. jeg satte din kide ind her:

$folder = 'billede/filen.jpg';
Imagejpeg($im,$folder,$jpegquality);
ImageDestroy($im);
}
?>

..og det fungerer som det skal, har du en idé til hvordan jeg får den til at springe outputtet over og blot generere billedet? - samtidig har jeg bemærket at hvis jeg sætter font farven til sort (0,0,05)og baggrunden til hvid (255,255,255) generers der en aldeles irriterende sort kant langs bunden, og i højre side af billedet, er der evt. noget man kan stille op der?!
Avatar billede googolplex Novice
06. juli 2004 - 11:11 #3
Hvis du ikke har en header() (header("Content-type: image/jpeg");) og hvis du supplerer med $folder i imagejpeg(), så burde den ikke skrive billede direkte ud, gør den stadig det ?
Avatar billede subhuman Nybegynder
06. juli 2004 - 11:23 #4
ja det gør den desværre :(
jeg fandt ud af hvad der lavede den sorte ramme:

//$black = ImageColorAllocate($im, 0,0,0);// hvad laver du lige der

noget andet der undrer mig er, hvis jeg skiver en tekst hvor der indgår gåseøjne(") escaper scriptet dem eks: "halløjsa" bliver til \"halløjsa\"
Avatar billede googolplex Novice
06. juli 2004 - 11:55 #5
Sidstnævnte er fordi magic_quotes_gpc er sat til On.

Gør således:

$text = stripslashes($text);

Derefter kan du indsætte.

Prøv lige at ret det og smid hele koden som den ser ud nu.
Avatar billede subhuman Nybegynder
06. juli 2004 - 12:01 #6
..den kommer her:

<?
if ($Submit){
Header("Content-type: image/jpeg");
if(!isset($bgred)) $bgred=0;
if(!isset($bggreen)) $bggreen=51;
if(!isset($bgblue)) $bgblue=153;
if(!isset($chred)) $chred=255;
if(!isset($chgreen)) $chgreen=255;
if(!isset($chblue)) $chblue=255;
if(!isset($shadow)) $shadow="yes";
if(!isset($wrappos)) $wrappos=20;
if(!isset($crop)) $crop=2.2;
if(!isset($jpegquality)) $jpegquality=80;
if(!isset($s)) $s=11;
$savetext=$text;
$text = stripslashes($text);
$text=wordwrap($text,$wrappos,"\n\r",0);
if (!isset($font)) $fontname="font/LHANDW.TTF";
else
$fontname="font/".$font.".ttf";
$size = imagettfbbox($s,0,$fontname,$text);
$dx = abs($size[2]-$size[0]);
$dy = abs($size[5]-$size[3]);
$upper=abs($size[5]);
$under=$size[1];
$th=$upper-$under;
$xpad=9;
if (substr_count($text,chr(13))>=1)
{$mult=(substr_count($text,chr(13)));
$ypad=($mult*$crop*$s)+$s;
}
else $ypad=($crop-2)*$s;
$im = imagecreate($dx+$xpad,$th+$ypad);
$color = ImageColorAllocate($im, $bgred,$bggreen,$bgblue);
//$black = ImageColorAllocate($im, 0,0,0); //hvad laver du der
$fontcolor = ImageColorAllocate($im, $chred,$chgreen,$chblue);
//ImageRectangle($im,0,0,$dx+$xpad-1,$th+$ypad-1,$black);
//ImageRectangle($im,0,0,$dx+$xpad,$th+$ypad,$white);
if ($shadow=="yes")
ImageTTFText($im, $s, 0, (int)($xpad/2)-2+1, $th+2+(int)($ypad/2)-3, /*$black,*/$fontname, $text);
ImageTTFText($im, $s, 0, (int)($xpad/2)-2, $th+2+(int)($ypad/2)-1-3, $fontcolor, $fontname, $text);
Imagejpeg($im,"",$jpegquality);
$filename = $text.".jpg";
$folder = 'billede/'.$filename;
Imagejpeg($im,$folder,$jpegquality);
ImageDestroy($im);
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>dynamisk billede</title>
</head>

<body>

<form method="POST" action="">
<p>Text <input name="text" type="text" value="JBGrt" size="60">
</p>
<p>size <input type="text" name="s" size="6" value="24">
</p>
<p>word wrap break position
  <input type="text" name="wrappos" size="3" value="20">
</p>
<p>background color</p>
<p>red <input type="text" name="bgred" size="6" value="255">
&nbsp;&nbsp;&nbsp; green <input
type="text" name="bggreen" size="8" value="255">
&nbsp;&nbsp;&nbsp; Blue <input type="text"
name="bgblue" size="7" value="255">
</p>
<p>Character color</p>
<p>red <input type="text" name="chred" size="6" value="0">
&nbsp;&nbsp;&nbsp; green <input
type="text" name="chgreen" size="8" value="0">
&nbsp;&nbsp;&nbsp; Blue <input type="text"
name="chblue" size="7" value="0">
</p>
<p>font <input type="text" name="font" size="20" value="LHANDW">
</p>
<p>Shadow <input type="radio" value="yes" name="shadow">
yes <input
name="shadow" type="radio" value="no" checked>
no</p>
<p>Crop size <input type="text" name="crop" size="20" value="3">
</p>
<p>Jpeg quality (0-100) <input type="text" name="jpegquality" size="20" value="80"></p>
<p><input name="Submit" type="submit" id="Submit" value="Submit">
<input type="reset" value="Reset"
name="Submit"></p>
</form>

</body>
</html>
Avatar billede subhuman Nybegynder
06. juli 2004 - 12:01 #7
woops:

//Header("Content-type: image/jpeg");
Avatar billede googolplex Novice
06. juli 2004 - 12:08 #8
Du har vidst glemt at fjerne den gamle:

Imagejpeg($im,"",$jpegquality);
Avatar billede subhuman Nybegynder
06. juli 2004 - 12:20 #9
perfecto - den havde jeg overset, takker for hjælpen!
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