Bilder Wasserzeichen an bestimmte Position

forum-user

Mitglied
Hallo Leute, wie ich schon mal erwähnte, bin ich neuling in Sachen PHP.
Ich versuche ein Script zu erstellen, mit dem ich ein Bild hochladen kann, was aber on the fly das bild skaliert und ein wasserzeichen einfügt.
Soweit funktioniert das skalieren und das Wasserzeichen einfügen. jedoch möchte ich das Wasserzeichen nicht oben links in der ecke stehen haben. Wo liegt mein gedanklicher Fehler.

PS.: Fehlerprüfungen habe ich erst mal hier weg gelassen.


PHP:
<form action="upload.php" method="post" name="bild" enctype="multipart/form-data">
	<input name="bild_laden" type="file" size="40">
    <label>
    <input type="submit" name="cmd_load" id="cmd_load" value="Datei hochladen" />
  </label>
</form>



<?php
if (isset($_POST['cmd_load'])){


  if($_FILES['bild_laden']['error'] > 0 ){
  		echo 'Problem: ';
			switch ($_FILES['bild_laden']['error']){
					case 1: echo 'Datei zu groß';
							break;
					case 2: echo 'Datei größer als max Größe';
							break;
					case 3: echo 'unvollständig geladen';
							break;
					case 4: echo 'nix hochgeladen';
							break;
			}
	exit;
  }
if($_FILES['bild_laden']['type'] != 'image/jpeg') {
	echo 'Problem: '.$_FILES['bild_laden']['name']. ' ist keine JPEG-DATEI.';
	exit;
}


if(is_uploaded_file($_FILES['bild_laden']['tmp_name'])){
	if(!move_uploaded_file($_FILES['bild_laden']['tmp_name'], $upload_file)){
		echo 'Konnte Datei nicht verschieben';
		exit;
	}
}
else {
	echo 'Fehler beim Verarbeiten der Datei '.$_FILES['bild_laden']['name'];
	exit;
}









// wasserzeichen
$wasserzeichen = 'wasserzeichen.jpg';
$wasserzeichen_size = getimagesize($wasserzeichen);
$wasserzeichen_x = $wasserzeichen_size[0];
$wasserzeichen_Y = $wasserzeichen_size[1]; 


// original bild
$oe_bild = $_POST['bild_laden'];
$oe_bild_size = getimagesize($oe_bild);
$oe_bild_x = $oe_bild_size[0];
$oe_bild_Y = $oe_bild_size[1]; 


// Bilder laden
$img_oeg_oe = imagecreatefromjpeg($oe_bild);
$img_oeg_wasserzeichen = imagecreatefromjpeg($wasserzeichen);


// Skalierung
$new_width = '800';
$new_height = intval($oe_bild_Y * $new_width / $oe_bild_x);  


// Neues Bild erstellen
$res_img = imagecreatetruecolor($new_width, $new_height);

$res_img_temp = imagecopyresized ($res_img, $img_oeg_oe, 0, 0, 0, 0, $new_width,$new_height, $oe_bild_x, $oe_bild_Y);

// Wasserzeichen einfügen
imagecopy($res_img_tmp, $wasserzeichen, 0, 0, 50, 50, 150, 30);
imagedestroy ($res_img);
}
?>
 
Dein imagecopy(), was das Wasserzeichen auf das temporäre Bild kopiert beinhaltet an den Stellen, wo man angeben kann, welche Koordinaten für das Ziel (=Destination = dst) nur 0, 0. Da müsstest du die Koordinaten (x,y) eintragen, wo das Wasserzeichen eingefügt werden soll. Hier gibts Informationen zu imagecopy(). Für die Lösung deiner Frage sind vor allem die Parameter dst_x und dst_y relevant.
 
Ich glaub ich hab meinen Fehler gefunden, könnt ja bitte noch mal einen blick drauf werden:
PHP:
<?php
if (isset($_POST['cmd_load'])){
	$upload_dir = 'car_image/';
	$upload_file = $upload_dir.$_FILES['bild_laden']['name'];
	
	
		if($_FILES['bild_laden']['error'] > 0 ){
 		 		echo 'Problem: ';
					switch ($_FILES['bild_laden']['error']){
						case 1: echo 'Datei zu groß';
								break;
						case 2: echo 'Datei größer als max Größe';
								break;
						case 3: echo 'unvollständig geladen';
								break;
						case 4: echo 'nix hochgeladen';
								break;
					}
				exit;
  		}

		if($_FILES['bild_laden']['type'] != 'image/jpeg') {
				echo 'Problem: '.$_FILES['bild_laden']['name']. ' ist keine JPEG-DATEI.';
			exit;
		}
	
	// original Bild
	$oe_bild = $_FILES['bild_laden']['tmp_name'];
	$oe_bild_size = getimagesize($oe_bild);
	$oe_bild_x = $oe_bild_size[0];
	$oe_bild_y = $oe_bild_size[1]; 
	
	// Skalierung
	$new_width = '800';
	$new_height = intval($oe_bild_y * $new_width / $oe_bild_x);  
	

// wasserzeichen
$wasserzeichen = 'wasserzeichen.jpg';
$wasserzeichen_size = getimagesize($wasserzeichen);
$wasserzeichen_x = $wasserzeichen_size[0];
$wasserzeichen_Y = $wasserzeichen_size[1]; 
$imgzeichen = imagecreatefromjpeg($wasserzeichen);


	$im = imagecreatefromjpeg($oe_bild);
	$new_image = imagecreatetruecolor($new_width, $new_height);

	
	// Bild einfügen
	imagecopy($new_image, $im, 0, 0, 0, 0, $new_width, $new_height);
	// Wasserzeichen einfügen
	imagecopy($new_image, $imgzeichen, 100, 100, 0, 0, 150, 30);	
    
	
	// Bild erstellen
	if(	imagejpeg($new_image, 'car_image/resized/'.$_FILES['bild_laden']['name'].'.jpg')) {
	 	echo 'Bild erstellt.';
	}
	 else {
	 	echo 'Es ist ein Fehler aufgetreten.';
	  die;	
	 }
 
// Speicher freigeben
imagedestroy($new_image);		
}
?>

<form action="" method="post" name="bild" enctype="multipart/form-data">
	<input name="bild_laden" type="file" size="40">
    <label>
    <input type="submit" name="cmd_load" id="cmd_load" value="Datei hochladen" />
  </label>
</form>
 
Zuletzt bearbeitet:
Zurück