Wasserzeichen beim Upload mit einbinden Hilfe

maarian

Erfahrenes Mitglied
Hallo

Ich habe hier ein Code damit lade ich die Fotos von den Usern hoch und speicher die zusätzlich in einer Datenbank.
Ich möchte jetzt aber noch das er das Wasserzeichen mit einbidet dazu habe ich auch den Code aber wie verbinde ich die beiden jetzt?

1. Code Upload normal
2. Code Wasserzeichen setzten

PHP:
 //$ext = strstr($_FILES['main_picture']['name'],".");
 $ext = strtolower(strchr($_FILES['main_picture']['name'],"."));
 $temp_small = test;
 $temp_number = rand(2, 999999999);
 $name = $_FILES['main_picture']['name'];
 $file = "user_img/".$user_info['username']."/".$temp_number."_".$temp_small.$ext;
 
				  

 if (copy($_FILES['main_picture']['tmp_name'], 'user_img/'.$user_info['username'].'/'.$temp_number.'_'.$temp_small.$ext)){

 mysql_query("UPDATE bilder
			  SET pfad_user='".$file."', 
			  status='".$freigabe."' 
			  WHERE username='".$user_info['username']."' 
			  AND position_user='".$_POST['position_user']."' AND typ='user'");


PHP:
$img_size = getimagesize($_FILES['main_picture']['tmp_name']);
$width = $img_size[0];
$height = $img_size[1];

$old_picture = imagecreatefromjpeg($_FILES['main_picture']['tmp_name']);
$new_picture = imagecreatetruecolor($width, $height);

imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width, $height, $width, $height);

$watermarkfile = imagecreatefrompng('img/watermark.png');

$alpha = imagecolorallocate($watermarkfile, 255,255,255);
imagecolortransparent ($watermarkfile, $alpha);

$waternarkpic_width = imagesx($watermarkfile);
$waternarkpic_height = imagesy($watermarkfile);
$watermarkdest_x = $img_size[0] - $waternarkpic_width - 0;
$watermarkdest_y = $img_size[1] - $waternarkpic_height - 0;

imagecopy($new_picture, $watermarkfile, $watermarkdest_x, $watermarkdest_y, 0, 0, $waternarkpic_width, $waternarkpic_height);
imagejpeg($new_picture,$_FILES['main_picture']['tmp_name'], 200);

kann mir jemand helfenwäre super
 
Zuletzt bearbeitet:
Hallo,

naja. Eigentlich ganz einfach.
Du setzt den Code, der das Wasserzeichen erzeugt in eine Funktion. Nennen wir sie addWatermark(image).

Diese Funktion rufst du dann an der Stelle auf, wo du das Bild kopierst, was man in neueren PHP-Versionen übrigens nicht mehr mit copy(), sondern mit move_uploaded_file() macht.

Vom Code her könnte das dann wie folgt aussehen (UNGETESTET):

PHP:
function addWatermark($image) {
  $img_size = getimagesize($image);
  $width = $img_size[0];
  $height = $img_size[1];

  $old_picture = imagecreatefromjpeg($image);
  $new_picture = imagecreatetruecolor($width, $height);

  imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width, $height, $width, $height);

  $watermarkfile = imagecreatefrompng('img/watermark.png');

  $alpha = imagecolorallocate($watermarkfile, 255,255,255);
  imagecolortransparent ($watermarkfile, $alpha);

  $waternarkpic_width = imagesx($watermarkfile);
  $waternarkpic_height = imagesy($watermarkfile);
  $watermarkdest_x = $img_size[0] - $waternarkpic_width - 0;
  $watermarkdest_y = $img_size[1] - $waternarkpic_height - 0;

  imagecopy($new_picture, $watermarkfile, $watermarkdest_x, $watermarkdest_y, 0, 0, $waternarkpic_width, $waternarkpic_height);
  return imagejpeg($new_picture,$image, 200); 
}



//$ext = strstr($_FILES['main_picture']['name'],".");
 $ext = strtolower(strchr($_FILES['main_picture']['name'],"."));
 $temp_small = test;
 $temp_number = rand(2, 999999999);
 $name = $_FILES['main_picture']['name'];
 $file = "user_img/".$user_info['username']."/".$temp_number."_".$temp_small.$ext;
 
                  

 if (move_uploaded_file(addWatermark($_FILES['main_picture']['tmp_name']), 'user_img/'.$user_info['username'].'/'.$temp_number.'_'.$temp_small.$ext)){

 mysql_query("UPDATE bilder
              SET pfad_user='".$file."', 
              status='".$freigabe."' 
              WHERE username='".$user_info['username']."' 
              AND position_user='".$_POST['position_user']."' AND typ='user'");
 
Entwicklung heißt manchmal auch Fehler analysieren. Jetzt kommt es darauf an, ob du erkennst, wo der Fehler liegt.
In meinem Code bearbeite ich ja zuerst die temporäre Datei und kopiere diese dann. Kann natürlich sein, dass ihm das nicht passt. In diesem Fall sollte man mal versuchen, erst die Datei richtig hochzuladen und sie nach dem Hochladen zu bearbeiten.

Es kann aber auch sein, dass ich beim Copy&Paste von deinem Script einen Fehler im Erzeugungsscript übersehen habe, oder irgendwie vergessen habe den Übergabeparameter richtig einzubinden. Das sollte man nochmal überprüfen.

Dann gilt es vielleicht auch zu überprüfen, ob das Script zur Erzeugung eines Wasserzeichens generell überhaupt funktioniert?

Gehe vllt. mal über diesen Weg vor!

Als erstes würde ich aber versuchen, die Bilddatei nach dem erfolgreichen Upload zu bearbeiten!
 
Das Script mit dem Wasserzeichen funktioniert wunderbar aber leider nicht im Zusammenhang mit dem Script :(
 
Schön, wenn das Script so funktioniert.
Dann mach es doch mal so, wie ich es vorher schon mal gesagt habe. Lade das Bild erst hoch und bearbeite es dann... Wenn du Code brauchst würde es dann so aussehen:

PHP:
function addWatermark($image) {
  $img_size = getimagesize($image);
  $width = $img_size[0];
  $height = $img_size[1];

  $old_picture = imagecreatefromjpeg($image);
  $new_picture = imagecreatetruecolor($width, $height);

  imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width, $height, $width, $height);

  $watermarkfile = imagecreatefrompng('img/watermark.png');

  $alpha = imagecolorallocate($watermarkfile, 255,255,255);
  imagecolortransparent ($watermarkfile, $alpha);

  $waternarkpic_width = imagesx($watermarkfile);
  $waternarkpic_height = imagesy($watermarkfile);
  $watermarkdest_x = $img_size[0] - $waternarkpic_width - 0;
  $watermarkdest_y = $img_size[1] - $waternarkpic_height - 0;

  imagecopy($new_picture, $watermarkfile, $watermarkdest_x, $watermarkdest_y, 0, 0, $waternarkpic_width, $waternarkpic_height);
  imagejpeg($new_picture,$image, 200); 
}



//$ext = strstr($_FILES['main_picture']['name'],".");
 $ext = strtolower(strchr($_FILES['main_picture']['name'],"."));
 $temp_small = test;
 $temp_number = rand(2, 999999999);
 $name = $_FILES['main_picture']['name'];
 $file = "user_img/".$user_info['username']."/".$temp_number."_".$temp_small.$ext;
 
                  
 $myNewFile = 'user_img/'.$user_info['username'].'/'.$temp_number.'_'.$temp_small.$ext;
 if (move_uploaded_file($_FILES['main_picture']['tmp_name'], $myNewFile)){
 
 addWatermark($myNewFile);

 mysql_query("UPDATE bilder
              SET pfad_user='".$file."', 
              status='".$freigabe."' 
              WHERE username='".$user_info['username']."' 
              AND position_user='".$_POST['position_user']."' AND typ='user'");

Und denk daran, dass der Ordner in dem dieses Script läuft, die Rechte 777 haben muss, da das neue Bild mit Wasserzeichen ja in diesen Ordner geschrieben wird. Wenn du das nicht möchtest, musst du den Pfad beim letzten Befehl der Funktion ("imagejpeg()") für das neue Bild noch anpassen.

Viele Grüße,
BigManu
 
Das funktioniert immer noch nicht der lädt das zwar hoch aber trägt es nicht in die Datenbank ein und somit wird das nicht angezeigt ..

Ich finde den Fehler aber auch nicht:confused::confused:
 
Hm... also ist dann am Ende das BIld mit dem Wasserzeichen auf dem FTP, ja?
Geht es jetzt nur noch um den Datenbankeintrag?

Wir sollten das Schritt für Schritt abarbeiten.

Also 1.) Ist das Bild mit Wasserzeichen jetzt auf dem FTP mit diesem Script?
 
Hat sich erledigt war mein Fehler.

Ich hatte vorher im Code noch den DB eintrag gelöscht und dann muss er ja kein UPDATE machen sondern INSERT

Funktioniert alles ich bedanke mich für deine Hilfe
 
Zurück