Selbsterzeugtes Bild speichern?
DiamondDog
- php
0 suit0 DiamondDog0 suit0 DiamondDog0 ChrisB0 DiamondDog0 Tom
Hallo Leute,
ich hab da folgendes und zwar erzeuge ich ein Bild mit etwas Text. Das ganze funktioniert auch so lange ich mir das Bild anzeigen lasse, möchte ich das Bild aber speichern passiert garnichts. Ich hab schon gegoogelt, aber nix passendes gefunden, zum speichern von selbsterzeugten Bildern, bis auf das wie ich es jetzt gemacht habe in der vorletzen Zeile.
Hier mal mein Code:
session_start();
Header ("Content-type: image/jpg");
//$Tiername = 'Eisbaer';
$Tier = $_POST['Tier'];
//$Tiername = 'Kueddel';
$Tiername = $_POST['Tiername'];
//$Tiertext = 'Tiertext';
$Tiertext = $_POST['Tiertext'];
//$img = imagecreate (55, 25); //(breite, höhe)
$img = ImageCreateFromPNG($_SERVER['DOCUMENT_ROOT'].'/fakehaustier/tiere/'.$Tier.'.png'); // Pfad zum Hintergrundbild
$font1 = $_SERVER['DOCUMENT_ROOT'].'/fakehaustier/pgfont.ttf'; // Pfad zur Font Datei
$white1 = ImageColorAllocate ($img, 255, 255, 255);
$ttfsize1 = 22; // Schriftgöße
$links1 = 12; // Schrift von links
$oben1 = 38; //Schrift von oben
$drehung1 = 0; // Drehung nach links oben um Grad
imagettftext ($img, $ttfsize1, $drehung1, $links1, $oben1, $white1, $font1, $Tiername);
$font2 = $_SERVER['DOCUMENT_ROOT'].'/fakehaustier/verdana.ttf'; // Pfad zur Font Datei
//$black = ImageColorAllocate ($img, 0, 0, 0); // Schrift Farbe
$white2 = ImageColorAllocate ($img, 255, 255, 255);
$ttfsize2 = 8; // Schriftgöße
$links2 = 120; // Schrift von links
$oben2 = 61; //Schrift von oben
$drehung2 = 0; // Drehung nach links oben um Grad
$Tiertext = wordwrap($Tiertext, 30, "\n", 1);
imagettftext ($img, $ttfsize2, $drehung2, $links2, $oben2, $white2, $font2, $Tiertext);
// Bild ausgabe
ImageJPEG ($img, "test_1.jpg");
ImageDestroy ($img);
Wäre super wenn mir jemand sagen könnte wo drann es liegt.
Danke schon mal fürs Helfen.
Mfg Dog
PS: rechte für Datei und Ordner sind natürlich vergeben ;)
ich hab da folgendes und zwar erzeuge ich ein Bild mit etwas Text. Das ganze funktioniert auch so lange ich mir das Bild anzeigen lasse, möchte ich das Bild aber speichern passiert garnichts. Ich hab schon gegoogelt, aber nix passendes gefunden, zum speichern von selbsterzeugten Bildern, bis auf das wie ich es jetzt gemacht habe in der vorletzen Zeile.
ImageJPEG ($img, "test_1.jpg");
ImageDestroy ($img);
[/code]
Wäre super wenn mir jemand sagen könnte wo drann es liegt.
Schalte das Error-Reporting ein und schau nach, ob du eine entsprechende Meldung erhältst - wenn kein Fehler auftauscht, schau im Scriptverzeichnis nach - dort sollte "test_1.jpg" liegen.
Der zweite Parameter nimmt übrigens auch Pfade.
Btw - imagepng() wäre ggf. schlauer als imgjpg, wenn du doch schon ein png als quelle für dein Hintergrundbild nutzt :).
Ok habs hin bekommen und in png geändert.
Alerdings hätte ich da noch eine Frage und zwar, ist es möglich nach dem erzeugen des Bildes einen Post an einen andere Seite zu schicken, ohne die eigene Seite zu wechseln. Also so gesehen den Link im hintergrund an eine andere Seite senden?
Ok habs hin bekommen und in png geändert.
Mit JPG hätte es wie gesagt ansich auch funktionieren müssen. Woran lag es denn jetzt, wenn ich fragen darf?
Alerdings hätte ich da noch eine Frage und zwar, ist es möglich nach dem erzeugen des Bildes einen Post an einen andere Seite zu schicken, ohne die eigene Seite zu wechseln. Also so gesehen den Link im hintergrund an eine andere Seite senden?
Du kannst in einem PHP-Script problemlos einen HTTP POST absenden - aber ich denke nicht, dass es das ist, was du willst.
Was willst du erreichen?
Mit JPG hätte es wie gesagt ansich auch funktionieren müssen. Woran lag es denn jetzt, wenn ich fragen darf?
Ich hatte einen kleinen klammer Fehler.
Du kannst in einem PHP-Script problemlos einen HTTP POST absenden - aber ich denke nicht, dass es das ist, was du willst.
Was willst du erreichen?
Also ich würde gerne das Bild was ich erzeuge an einen Bild Hoster senden, das dieses dort Hochgeladen wird.
Wenn es hochgeladen ist, soll es von meinem Server gelöscht werden.
Hi,
Also ich würde gerne das Bild was ich erzeuge an einen Bild Hoster senden, das dieses dort Hochgeladen wird.
Wenn es hochgeladen ist, soll es von meinem Server gelöscht werden.
Dann suchst du nach "POST to Host", also der Methode, von deinem Server aus einen POST-Request an einen anderen Server zu schicken.
http://php-faq.de/q-code-upload.html beschreibt das für einen Dateiupload.
Das wird so trivial natürlich nur dann klappen, wenn der Zielserver keinen vorherigen Login erfordert, keine Captchas zur Absicherung verwendet, etc.
MfG ChrisB
Hab mir das mal angeschaut aber das übersteigt meine Kentnisse in weitem.
Also ich hab mal ein Bild hochgeladen und mit LiveHTTP headers mitgeschrieben:
http://www.abload.de/upload.php
POST /upload.php HTTP/1.1
Host: www.abload.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.abload.de/
Cookie: ablgntan=2c1eee98f00588486471b5ea6b98aeda
Content-Type: multipart/form-data; boundary=---------------------------108161139316704
Content-Length: 451
-----------------------------108161139316704
Content-Disposition: form-data; name="img0"; filename=""
Content-Type: application/octet-stream
-----------------------------108161139316704
Content-Disposition: form-data; name="img1"
http://www.seite.de/fakehaustier/tiere/Eisbaer.png
-----------------------------108161139316704
Content-Disposition: form-data; name="resize"
none
-----------------------------108161139316704--
HTTP/1.x 200 OK
X-Powered-By: PHP/5.2.9-0.dotdeb.2
Content-Type: text/html; charset=utf-8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Transfer-Encoding: chunked
Date: Wed, 24 Jun 2009 15:41:08 GMT
Server: abload.de - img3
Leider weiß ich nur Ansatzweise wie ich das ganze machen müste.
Geht das nicht irgendwie kurz und knapp mit Post blabla an die Adresse?
Also ich habs jetzt so versucht:
<?php
session_start();
// Wurde Abschicken geklickt
if(isset($_POST["Submit"]))
{
// für sicherheitscode
$zufallszahl = $_SESSION['zufallszahl'];
if(empty($_POST["code"]))
{
echo "Sie haben keinen Sicherheitscode angegeben.<br><br>";
}else{
if($_POST["code"] != base64_decode($zufallszahl))
{
echo "Sie haben einen falschen Sicherheitscode angegeben.<br><br>";
}
else
{
// Bild erzeugen=============================================
session_start();
Header ("Content-type: image/png");
//$Tiername = 'Eisbaer';
$Tier = $_POST['Tier'];
//$Tiername = 'Kueddel';
$Tiername = $_POST['Tiername'];
//$Tiertext = 'Tiertext';
$Tiertext = $_POST['Tiertext'];
//$img = imagecreate (55, 25); //(breite, höhe)
$img = ImageCreateFromPNG($_SERVER['DOCUMENT_ROOT'].'/fakehaustier/tiere/'.$Tier.'.png'); // Pfad zum Hintergrundbild
$font1 = $_SERVER['DOCUMENT_ROOT'].'/fakehaustier/pgfont.ttf'; // Pfad zur Font Datei
$white1 = ImageColorAllocate ($img, 255, 255, 255);
$ttfsize1 = 22; // Schriftgöße
$links1 = 12; // Schrift von links
$oben1 = 38; //Schrift von oben
$drehung1 = 0; // Drehung nach links oben um Grad
imagettftext ($img, $ttfsize1, $drehung1, $links1, $oben1, $white1, $font1, $Tiername);
$font2 = $_SERVER['DOCUMENT_ROOT'].'/fakehaustier/verdana.ttf'; // Pfad zur Font Datei
//$black = ImageColorAllocate ($img, 0, 0, 0); // Schrift Farbe
$white2 = ImageColorAllocate ($img, 255, 255, 255);
$ttfsize2 = 8; // Schriftgöße
$links2 = 120; // Schrift von links
$oben2 = 61; //Schrift von oben
$drehung2 = 0; // Drehung nach links oben um Grad
$Tiertext = wordwrap($Tiertext, 30, "\n", 1);
imagettftext ($img, $ttfsize2, $drehung2, $links2, $oben2, $white2, $font2, $Tiertext);
// Bild ausgabe
ImagePNG ($img,"fakehaustier/erzeugtefaketiere/".$Tiername.".png");
ImageDestroy ($img);
//===========================================================
$host = "www.abload.de";
$port = "80";
$path = "/upload.php";
$referer = "http://www.abload.de/";
$data_to_send = "http://www.seite.de/fakehaustier/tiere/Eisbaer.png";
$dc = 0;
$bo = "---------------------------108161139316704";
$fp = fsockopen($host, $port);
fputs($fp, "POST $path HTTP/1.1\n");
fputs($fp, "Host: $host\n");
fputs($fp, "Referer: $referer\n");
fputs($fp, "User-Agent: Mozilla/4.05C-SGI [en] (X11; I; IRIX 6.5 IP22)\n");
fputs($fp, "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\n");
fputs($fp, "Accept-Charset: iso-8859-1,*,utf-8\n");
fputs($fp, "Content-type: multipart/form-data; boundary=$bo\n");
foreach($data_to_send as $key=>$val) {
$ds =sprintf("--%s\nContent-Disposition: form-data; name=\"%s\"\n\n%s\n", $bo, $key, $val);
$dc += strlen($ds);
}
$dc += strlen($bo)+3;
fputs($fp, "Content-length: $dc \n");
fputs($fp, "\n");
foreach($data_to_send as $key=>$val) {
$ds =sprintf("--%s\nContent-Disposition: form-data; name=\"%s\"\n\n%s\n", $bo, $key, $val);
fputs($fp, $ds );
}
$ds = "--".$bo."--\n";
fputs($fp, $ds);
while(!feof($fp)) {
$res .= fread($fp, 1);
}
fclose($fp);
}}
session_start();
srand ((double) microtime() * 1000000);
$zufallszahl = rand(1000,9999);
$_SESSION['zufallszahl'] = base64_encode($zufallszahl);
}else{
session_start();
srand ((double) microtime() * 1000000);
$zufallszahl = rand(1000,9999);
$_SESSION['zufallszahl'] = base64_encode($zufallszahl);
echo '<div id="imgFakeTier"><img id="FakeTier" name="FakeTier" src="/fakehaustier/tiere/Eisbaer.png" width="456" height="139" border="0" title="FakeTier"></div>';
}
?>
~~~nur ich bräuchte die Server Antwort oder so um zu wissen wie das Bild den nun da heist damit ich den Link dazu habe. Ohne irgend neAntowrt bringt das ganze ja nix.
Hello,
Dann suchst du nach "POST to Host", also der Methode, von deinem Server aus einen POST-Request an einen anderen Server zu schicken.
http://php-faq.de/q-code-upload.html beschreibt das für einen Dateiupload.
Hier müssten doch jetzt die einzelnen Headerzeilen mMn mit "\r\n" und nicht mit "\n" abgeschlossen werden, oder? Hier wird ja nichts mehr durch irgendwelche Scripte verändert, wie bei mail()...
Das wird so trivial natürlich nur dann klappen, wenn der Zielserver keinen vorherigen Login erfordert, keine Captchas zur Absicherung verwendet, etc.
Wie müsste man einen vorher abgeforderten Cookie unterbringen (mitsenden)?
[ So ein Mist! Ich finde meine HTTP-Header-Übersicht mit Beschreibungen nicht wieder.
Wo hab ich die bloß abgespeichert? ]
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
http://php-faq.de/q-code-upload.html beschreibt das für einen Dateiupload.
Hier müssten doch jetzt die einzelnen Headerzeilen mMn mit "\r\n" und nicht mit "\n" abgeschlossen werden, oder?
Ja, stimmt.
Beim normalen Post-to-Host-Beispiel machen sie's dort auch richtig.
Wie müsste man einen vorher abgeforderten Cookie unterbringen (mitsenden)?
Zusätzlicher Cookie-Header.
"Cookie: name1=value1; name2=value2; ...\r\n"
MfG ChrisB
Hello,
Wie müsste man einen vorher abgeforderten Cookie unterbringen (mitsenden)?
Zusätzlicher Cookie-Header.
"Cookie: name1=value1; name2=value2; ...\r\n"
Ich hatte es bereits per Kleinversuch mit der Live-Header-Extension ausprobiert, da ich den Cookie-Header in der RFC 2616/sec14 auch nicht gefunden habe.
So ein Shiet. Ich hatte so eine tolle Ausarbeitung über Request- und Response-Header im Internet gefundne und auch ganz bestimmt gespeichert. Ich finde die nicht wieder.
Bei der Gelegenheit noch ein Thema zum Post-Request per Script.
Welche Timeouts und weiteren Mechanismen sind da noch relavent gewesen?
http://de2.php.net/manual/de/function.stream-set-blocking.php
Ändern, damit das Lesen per Stream auf der entfernten Ressource nicht wartet wenn die gerade gesperrt ist.
http://de2.php.net/manual/de/function.stream-set-timeout.php
wenn beim Lesen keine Antwort kommt
ini: default_socket_timeout oder als Parameter beim Funktionsaufruf
http://de2.php.net/manual/de/filesystem.configuration.php#ini.default-socket-timeout
Das gilt doch nur für fopen, oder? Wenn der Socket nicht innerhalb der angegebenen Zeit installiert werden konnte, gibt es dieses Timeout?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg