Watermark während Upload einfügen

PhoenixDH

Erfahrenes Mitglied
Auf meiner Seite haben User die Möglichkeit Bilder hochzuladen. Damit die Bilder nicht ganz so missbraucht werden will ich während dem Upload ein Watermark einfügen! Ist das grundsätzlich möglich?

Der Code meines Uploadscriptes:
Code:
...
copy($datei,"$pfad".$g_user['userid']."_".$i.".$datei_ending[$anzahl]");
...
damit wird das Bild auf dem Server gespeichert!

Ist es dann möglich das Bild vorher so zu verändern:
Code:
$im = imagecreatefrompng($datei);
$imgWatermark = imagecreatefrompng("watermark.png");
imagecopy($im, $imgWatermark, 5, 5, 0, 0, 253, 29); 

copy($im,"$pfad".$g_user['userid']."_".$i.".$datei_ending[$anzahl]");

Fehlt da noch was an Code?

Die ursprüngliche Dateieindung soll beibehalten werden!

Danke für eure Hilfe!
 
An sich dürfte das so klappen, weiß jetzt nur nicht, ob du ne png Datei einfach über ne gif Datei legen kannst. Nur was ich dir auf den Weg geben kann, ist, dass du das Wasserzeichen nach dem Upload raufklebst, weil der Upload kann ja auch schief gehen und denn bringt dir das Wasserzeichen nix! :)
 
Hallo!

Das Bild muss erst komplett hochgeladen sein.
So lange das Bild also nicht mindestens im Temp-Dir liegt, kann es auch nicht verarbeitet werden..... eigentlich ganz logisch. ;)
Dort angekommen kannst Du es mit den Image-Funktionen öffnen und weiter verarbeiten..... und zu guter letzt am endgültigem Zielort als neue Datei speichern.
Eigentlich müsstest Du Dir so auch die copy() Geschichte ersparen können.

Die Dateiendung der Quelldatei ist egal..... Du musst nur die entsprechenden formatbezogenen Image-Funktionen nutzen.
Genauso egal ist auch die Dateiendung der Zieldatei..... so lange Du auch hier die formatbezogenen Image-Funktionen nutzt.
Im Klartext heisst dieses, Du kannst z.b. ein GIF als Quelldatei öffnen, Dein watermark.png drüberlegen und letztendlich als JPG speichern. ;)

@StefanR, warum sollte er ein PNG nicht über ein GIF legen können?
PNG kennt ja auch transparenten Hintergrund..... oder worauf willst Du hinaus?
Allerdings könnte es sein dass PHP (je nach Version und/oder Serverkonfiguration) keine Unterstützung für GIF bietet (zumindest nicht schreibend, da gab es ja mal irgendwie Lizenzprobleme).

Gruss Dr Dau
 
Schön das das geht!

Was meinst du mit formatbezogenen Image-Funktionen?

Müsste ich dann quasi nochmal den Typ des BIldes, jpg, gif ... auslesen und dann entscheiden welche FUnktion ich anwende oder?

Haste vl. ein Stückchen Beispielcode von dem was bei meinem oben fehlt?

Dank euch!
 
  • imagecreatefromgif
  • imagecreatefromjpeg
  • imagecreatefrompng


sind z.B. Format bezogene Imagefunktionen.
Auszug aus SelfPHP3:
Selfphp3 hat gesagt.:
Mit imagecreatefromgif() erstellt man ein neues Bild, das aus einer Datei oder
URL im GIF-Format gelesen wird. Der Inhalt der gelesenen Datei wird in das
neue Bild geschrieben. Der von dieser Funktion zurückgegebene Zeiger muss bei
allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild
hineinzeichnen kann.

Mit imagecreatefromjpeg() erstellt man ein neues Bild, das aus einer Datei oder
URL im JPEG-Format gelesen wird. Der Inhalt der gelesenen Datei wird in das
neue Bild geschrieben. Der von dieser Funktion zurückgegebene Zeiger muss bei
allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild
hineinzeichnen kann.

Mit imagecreatefrompng() erstellt man ein neues Bild, das aus einer Datei oder
URL im PNG-Format gelesen wird. Der Inhalt der gelesenen Datei wird in das
neue Bild geschrieben. Der von dieser Funktion zurückgegebene Zeiger muss bei
allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild
hineinzeichnen kann.
 
Zuletzt bearbeitet:
Und da die Bilder ja auch in verschiedenen Formaten ausgegeben bzw. gespeichert werden können.....
ImageGIF()
ImageJPEG()
ImagePNG()

Und damit PHP (insbesondere beim öffnen) auch weiss welche Image-Funktion nun die geeignete ist, gibt es die wunderschöne Funktion GetImageSize() die nicht nur die Abmessungen des Bildes zurückliefert, sondern auch den Typ.
Allerdings gibt ja auch $_FILES den Typ zurück.

Um zu ermitteln um welchen Typ es sich handelt und welche Funktion dann jeweils eingesetzt werden soll, würde ich einen switch() einsetzen.

Wie Du bei den oben stehenden Funktionen sehen kannst, wird dort die Quelldatei und optional auch die Zieldatei angegeben..... somit kann Dein copy() also entfallen..... es sei denn Du will das originale unveränderte Bild auch behalten.
Das hat dann aber eigentlich nichts mehr mit den Image-Funktionen zu tun, sondern ist ein ganz gewöhnlicher Upload.

Ansonsten denke ich dass hier genug Codeschnippsel rumschwirren, so dass Du auch fündig werden wirst.
 
Super, denke ich habe jetzt alles was ich brauche, werde das mal testen!

Kann ich das auch lokal auf meinem Apache (xampp) testen?
 
Ja sicher kannst Du es auch unter XAMPP testen.
Nur solltest Du, damit Du später keine bösen Überraschungen erlebst, zumindest safe_mode=ON und register_globals=OFF einstellen.
 
Zurück