Bild verändern mit PHP

  • #1
C

Ciryx

Bekanntes Mitglied
Themenersteller
Dabei seit
07.01.2004
Beiträge
135
Reaktionspunkte
0
Ort
Zürich
Hallo zusammen...

Ich möchte folgendes Bewerckstelligen:

User können über ein Upload formular ihr Bild hinaufladen... anschliessend wird das heraufgeladene Bild inklusive einem Bild von mir angezeigt. Mein bild sollte gleich unterhalb des heraufgeladenen Bildes erscheinen. Das angezeigte Bild soll aber nur ein Bild sein (also eine Datei). Kann mir jemand helfen bzw. ist das Problem gut beschrieben? :D
 
  • #2
  • #3
Könnte ungefähr so funktionieren:
Code:
<?php 
function set_create($mime) {
	switch ($mime) {
		 case->image/jpeg' :
			 return->imagecreatefromjpeg';
			 break;
		 case->image/png' :
			 return->imagecreatefrompng';
			 break;
		 case->image/gif' :
			 return->imagecreatefromgif';
			 break;
		 default:
			 return FALSE;
		}
}
$size_1 = GetImageSize (bild1.jpg);
$create = set_create($size_1['mime']);
$im_1 = $create(bild1.jpg);

$size_2 = GetImageSize (bild2.gif);
$create = set_create($size_2['mime']);
$im_2 = imagecreatefromgif(bild2.gif);

$hight_new = ($size_1[1]+$size_2[1]);
$width_new = ($size_1[0] >= $size_2[0]) ? $size_1[0] : $size_2[0];

$im = @imagecreatetruecolor($width_new, $hight_new)
   or die (Kann keinen neuen GD-Bild-Stream erzeugen);

imagecopy($im, $im_1, 0, 0, 0, 0, $size_1[0], $size_1[1]);
imagecopy($im, $im_2, 0, ($size_1[1]+1), 0, 0, $size_2[0], $size_2[1]);

header (Content-type: image/png);
imagepng($im);

imagedestroy($im_1);
imagedestroy($im_2);
?>

Aber wirklich nur Uuuuuuuungefähr ;)

Das Beispiel würde z.B. aus den folgenden 2 Bildern.

Bild 1
bild1.jpg

Bild 2
bild2.gif


folgendes erzeugen => http://wt-scriptarchiv.de/script_demos/imagecreate/

Guckst du hier => PHP-Manual-Grafik-Funktionen
 
  • #4
Ok.. Danke Conny

Nun zwei Probleme:

1. bild1.jpg ist dieses, welches der User herauflädt also muss ich nach dem Uploaden den Dateinamen holen... wie stelle ich das an?

2. Das Bild welches angefügt wird, ist immer das selbe... (hier im Beispil das Apache logo) Nun soll das aber zentriert unterhalb das heruafgeladenen Bildes erscheinen und der Hintergrund soll weiss sein (hier ist er schwarz)

Danke für deine Mühe...
 
  • #5
Ciryx schrieb:
1. bild1.jpg ist dieses, welches der User herauflädt also muss ich nach dem Uploaden den Dateinamen holen... wie stelle ich das an?

Ähm, den bekommst du doch beim Upload des Bildes wenn du es verschiebst ( move_uploaded_file => http://de3.php.net/manual/de/function.move-uploaded-file.php ).

Ciryx schrieb:
2. Das Bild welches angefügt wird, ist immer das selbe... (hier im Beispil das Apache logo) Nun soll das aber zentriert unterhalb das heruafgeladenen Bildes erscheinen und der Hintergrund soll weiss sein (hier ist er schwarz)

OK, neue Version:
Datei => get_image.php
Code:
<?php
$bild_1 = $_REQUEST[bild]; // Das obere Bild
$bild_2 = bild2.gif; // Das untere Standardbild

if(!file_exists($bild_1))
	die(Datei existiert nicht!!!);

header (Content-type: image/png);
	
function set_create($mime) {
	switch ($mime) {
		case->image/jpeg' :
			return->imagecreatefromjpeg';
			break;
		case->image/png' :
			return->imagecreatefrompng';
			break;
		case->image/gif' :
			return->imagecreatefromgif';
			break;
		default:
			return FALSE;
	}
}
$size_1 = getimagesize ($bild_1);
$create = set_create($size_1['mime']);
$im_1 = $create($bild_1);

$size_2 = getimagesize ($bild_2);
$create = set_create($size_2['mime']);
$im_2 = $create($bild_2);

$hight_new = ($size_1[1]+$size_2[1]);
$width_new = ($size_1[0] >= $size_2[0]) ? $size_1[0] : $size_2[0];

$im = @imagecreatetruecolor($width_new, $hight_new)
   or die (Kann keinen neuen GD-Bild-Stream erzeugen);

$bg = imagecolorallocatealpha($im, 255, 255, 255, 0);
imagefill($im, 0, 0, $bg);

imagecopy($im, $im_1, 0, 0, 0, 0, $size_1[0], $size_1[1]);

$start_x = (($width_new / 2) - ($size_2[0] / 2));
imagecopy($im, $im_2, $start_x, ($size_1[1]+1), 0, 0, $size_2[0], $size_2[1]);

imagedestroy($im_1);
imagedestroy($im_2);
imagepng($im);
imagedestroy($im);

?>

Aufrufen kannst du es so:
Code:
....
<p><img src=get_image.php?bild=bild1.jpg border=0 /></p>
....
Hier sollte der Pfad zum Bild angegeben werden. z.B. ...?bild=uploads/bild1.jpg
Ist der Pfad immer gleich, kannst du ihn direkt in die Datei get_image.php schreiben, so:
Code:
<?php
...
$bild_1 = uploads/.$_REQUEST[bild]; // Das obere Bild
...
?>
So brauchst du immer nur den Bildnamen an das Script zu übergeben.

Guckst du => http://wt-scriptarchiv.de/script_demos/imagecreate/
 
  • #6
ok bei diesem Thema habe ich definitiv den Durchblick nicht! Zusätzlich habe ich es noch falsch Beschrieben... tut mir leid conny... also nochmals:

- das obere Bild wird vom User über ein Formular hochgeladen
- unten dran kommt dann zentriert mein Bild

Beispiel: http://www.ciryx.ch/images/sharks.png

Mein momentaniger Quellcode welcher nicht funzt:

Code:
<?php

if($_POST[test]==yes) {

 
$path = logos/;

if (!copy($file, $path.$file_name))
{
echo Der Upload hat nicht funktioniert! Bitte erneut versuchen.;
} else {



$bild_1 = $path.$file_name; // Das obere Bild
$bild_2 = ehfe.jpg; // Das untere Standardbild

if(!file_exists($bild_1))
die(Datei existiert nicht!!!);

header (Content-type: image/png);

function set_create($mime) {
switch ($mime) {
case->image/jpeg' :
return->imagecreatefromjpeg';
break;
case->image/png' :
return->imagecreatefrompng';
break;
case->image/gif' :
return->imagecreatefromgif';
break;
default:
return FALSE;
}
}
$size_1 = getimagesize ($bild_1);
$create = set_create($size_1['mime']);
$im_1 = $create($bild_1);

$size_2 = getimagesize ($bild_2);
$create = set_create($size_2['mime']);
$im_2 = $create($bild_2);

$hight_new = ($size_1[1]+$size_2[1]);
$width_new = ($size_1[0] >= $size_2[0]) ? $size_1[0] : $size_2[0];

$im = @imagecreatetruecolor($width_new, $hight_new)
   or die (Kann keinen neuen GD-Bild-Stream erzeugen);

$bg = imagecolorallocatealpha($im, 255, 255, 255, 0);
imagefill($im, 0, 0, $bg);

imagecopy($im, $im_1, 0, 0, 0, 0, $size_1[0], $size_1[1]);

$start_x = (($width_new / 2) - ($size_2[0] / 2));
imagecopy($im, $im_2, $start_x, ($size_1[1]+1), 0, 0, $size_2[0], $size_2[1]);

imagedestroy($im_1);
imagedestroy($im_2);
imagepng($im);
imagedestroy($im);

echo
<img src=\get_image.php?bild=bild1.jpg\ border=\0\ />;

}
}
?>


<br><br>
<b>Flagge Hochladen<b><br>
<hr width=300 align=left><br>

<FORM ENCTYPE=multipart/form-data ACTION=?pn=logo_creator.php METHOD=POST>
<input type=hidden name=MAX_FILE_SIZE value=2097152>
<input type=hidden name=test value=yes>
<input type=file name=file>
<input type=submit value=Flagge hochladen>
</form>
 
  • #7
Kann so nicht klappen ;)

Das Bild (des Users) muss ersteinmal hochgeladen und an seinen richtigen Platz verschoben werden.
Erst wenn es richtig abgelegt ( mit move_uploaded_file ) ist kannst du die 2 Bilder zusammenfügen, vorher nicht ( wo nix is kann man nix zusammenfügen ).

Außerdem hat in der von mir beschriebenen Datei get_image.php nix anderes (schon gar kein HTML ) drinn zu stehen.
Diese dient nur zur Temporären-Bilderzeugung zur Laufzeit.

Reihenfolge:
- Bild Upload per Formular
- Formulareingaben überprüfen und Bild verschieben.
- Anzeige des Bildes per:
Code:
<img src=get_img.php?bild=irgendwas_und_irgendwo.gif border=0>
hier werden BEIM Aufruf die Bilder zusammengeklebt.
Mehr passiert hier nicht.

Sorry, aber du solltest wirklich mal ein bissle im PHP-Manual schmökern ;)
 
  • #8
oohhh jaa... da hast du recht :D

werde mir das jetzt mal anschauen
 
  • #10
kannst thema schliessen... funktioniert alles!!! Bestens!

Schönes Weekend noch allen!!!
 
  • #11
 
Thema:

Bild verändern mit PHP

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben