Tutorial: Wasserzeichen mit PHP einfügen

28. Februar 2007

Um seine Bilder im Internet vor unerlaubten Kopien und Diebstahl zu schützen wird oft ein Wasserzeichen in dieses eingefügt. Dies kann man manuell machen. Sind dies jedoch sehr viele Bilder, wird das schnell zur qual. Abhilfe schafft ein kleines PHP-Script welches schnell programmiert ist.

Die Bilder

PHP-Code

Danacht erstellt man eine PHP-Datei mit folgenden Inhalten

<?php
// Header setzten
header('Content-type: image/jpeg');

Hier wird der Header gesetzt, damit der Browser weiß, dass dies ein JPEG-Bild ist.

// Bilder laden
$imgsrc = imagecreatefromjpeg('foto-wasserzeichen.jpg');
$imgzeichen = imagecreatefromjpeg('wasserzeichen.jpg');

Danach werden die einzelnen Bilder und Fotos geladen.

// Bild Infos
$width = imagesx($imgsrc);
$height = imagesy($imgsrc);

Nun lesen wir die Höhe und Breite des Fotos aus. Dies ist dann von Vorteil, wenn später das ganze dynamisch ablaufen soll.

// Bilder erzeugen
$img = imagecreatetruecolor($width, $height);

Nun erzeugen wir ein neues Bild in der größte des Fotos. Sollte diese Zeile einen Fehler erzeugen, dann ändere das imagecreatetruecolor(); in ein imagecreate um. Dies hat zwar ein deutlich schlechteres Ergebnis, jedoch funktioniert dies dann auch unter einer GD Libary Version kleiner als 2.0.

// Bild einfügen
imagecopy($img, $imgsrc, 0, 0, 0, 0, $width, $height);

Anschließend fügen wir das Foto ein. Die ersten zwei “0″ sind die x/y-Koordinaten im Ziel. Die zweiten “0″ sind der Startpunkt zum kopieren im Originalfoto. $width und $height sind die Endpunkte zum kopieren.

// Wasserzeichen einfügen
imagecopy($img, $imgzeichen, 0, 0, 0, 0, 150, 30);

Danach folgt noch das Wasserzeichen. Da dieses immer gleich ist, benötigen wir hier keine Variable für die Breite und Höhe.

// Bild anzeigen
imagejpeg($img);

Nun lassen wir noch das Bild anzeigen…

// Speicher freigeben
imagedestroy($img);
?>

… und geben schließlich noch den belegten Speicher wieder frei.

Wenn Du nun die PHP-Datei aufrust, wird dir das Foto mit Wasserzeichen angezeigt. Diese PHP-Datei kannst Du wie ein ganz normales Bild behandeln, also über den IMG-Tag in deine Homepage einbauen.

Hier nochmals der gesamte Code als Zusammenfassung:

<?php
// Header setzten
header('Content-type: image/jpeg');
 
// Bilder laden
$imgsrc = imagecreatefromjpeg('foto-wasserzeichen.jpg');
$imgzeichen = imagecreatefromjpeg('wasserzeichen.jpg');
 
// Bild Infos
$width = imagesx($imgsrc);
$height = imagesy($imgsrc);
 
// Bilder erzeugen
$img = imagecreatetruecolor($width, $height);
 
// Bild einfügen
imagecopy($img, $imgsrc, 0, 0, 0, 0, $width, $height);
 
// Wasserzeichen einfügen
imagecopy($img, $imgzeichen, 0, 0, 0, 0, 150, 30);
 
// Bild anzeigen
imagejpeg($img);
 
// Speicher freigeben
imagedestroy($img);
?>

{ 4 Kommentare } { 3 Shares }

{ 4 Kommentare… lies sie unten oder schreib selbst einen }

PHP-Neuling April 24, 2010 um 10:57

Nützliches Tutorial – Danke! Auch wenn der Eintrag bereits etwas älter ist – zwei Verbesserungsvorschläge: 1) den PHP-Code am Schluss in einer Datei oder in einem Textfeld anbieten und 2) einen kleinen Fehler im Code verbessern: Wenn man obige Bildressourcen herunterlädt, trägt ein Bild den Namen “foto-wasserzeichen.jpg”, im PHP-Code wird aber die Bezeichnung “natur.jpg” verwendet – der Aufruf der Bildressource ist so also nicht möglich. Nur ein kleiner Fehler, kann aber irritieren. Ansonsten sehr übersichtlich.

Antworten

Martin Bauer April 24, 2010 um 14:10

@PHP-Neuling: Vielen Dank für Deine Kritik. Hab mir das gleich mal zu Herzen genommen und die Änderungen vorgenommen.

Antworten

Manni Januar 4, 2012 um 19:20

welchen Grund kann es haben, dass das selbe Script auf dem einen Server richtig funktioniert, auf einem anderen aber keine Bilder ausgegeben werden?

Antworten

Martin Bauer Januar 4, 2012 um 19:29

@manni: Pauschal und ohne näheres zu wissen würde ich mal darauf tippen, dass die GD Library nicht installiert ist. Oder es gibt einen anderen PHP-Fehler. Dazu einfach mal schauen ob ein PHP-Fehler oder evtl. auch nur eine Warnung, etc. angezeigt wird. Diese verhindern auch schon die Darstellung des Bildes.

Antworten

Schreib einen Kommentar

Previous post:

Next post: