Einführung in die gdLibrary (gdLib)
Wasserzeichen
Wer seine Fotos und Grafiken im Internet schützen möchte, wird ziemlich schnell feststellen, dass dies
nahezu unmöglich ist. Ein Screenshot der Webseite auf der das Foto gezeigt wird reicht, und schon hat man
eine saubere Kopie in 72 dpi.
Einzig ein Wasserzeichen kann den interessierten Dieb die Laune verderben. Am effektivsten ist hier
nur ein visuelles Zeichen, zum Beispiel ein Logo, quer über das Bild. Das macht es für die weitere Verwendung
ziemlich unbrauchbar. Wer klaut schon gern ein Foto und druckt das Copyright-Logo mit ab?
Aufgabe: Wasserzeichen in ein bestehendes Bild einbinden (Bild in Bild)
Wir öffnen wie gewohnt unser Bild, im Beispiel narrtrium.jpg, erstellen uns ein neues Bild, mit dem wir arbeiten können.
Wir binden das Ursprungsbild mit imagecopyresampled() in das neue ein und zeichnen es ggf. noch weich. Nun laden wir uns das Wasserzeichenbild in den Speicher.
Sinnigerweise benutzen wir ein PNG, damit wir ein freigestelltes Bild einsetzen können. Mit den Befehlen imagesx() und imagesy() lesen wir noch schnell
die Breite und Höhe aus und definieren mit $watermarkdest_x und $watermarkdest_y die Position im neuen Bild.
Nun müssen wir unsere beiden Bilder nur noch zusammenfügen. Das macht der Befehlt imagecopymerge() für uns. Jetzt brauchen wir das daraus resultierende Bild nur
noch ausgeben.
Der Code:
<?php $file = 'narrtrium.jpg'; // Originalformat auslesen $width = $size[0]; $height = $size[1]; // Bild laden $old_picture = imagecreatefromjpeg($file); // Neues Bild erzeugen $new_picture = imagecreatetruecolor($width, $height); // Kopiert das Ursprungsbild und formatiert es um + Weichzeichnung. imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width, $height, $width, $height); // Wasserzeichen einbinden $transition = 50; $watermarkfile = imagecreatefrompng('wasserzeichen.png'); $waternarkpic_width = imagesx($watermarkfile); $waternarkpic_height = imagesy($watermarkfile); $watermarkdest_x = $width / 2 - ($waternarkpic_width / 2); $watermarkdest_y = $height / 2 - ($waternarkpic_height / 2); imagecopymerge($new_picture, $watermarkfile, $watermarkdest_x, $watermarkdest_y, 0, 0, $waternarkpic_width, $waternarkpic_height, $transition); // Bild ausgeben imagejpeg($new_picture); ?>

- Bild in Bild: Das Logo verdeckt das das Foto und macht es damit für potentielle Diebe unbrauchbar.
Externe Bilder verarbeiten
Ich habe eine Anfrage erhalten, ob es auch möglich sei, externe Bilder als Basis zu verwenden. Sind die Rechte am Bildmaterial geklärt, gebt ihr einfach im o.g. Quellcode eine andere Quelle an:
<?php $file = 'http://www.example.com/pics/beispiel.jpg'; ?>
In php Version 4.2.0 hat sich im Befehl
imagecopymerge()ein Bug eingeschlichen, der die Transparenzfunktion außer Kraft setzt. Dieser Bug ist erst
seit php Version 4.3.3RC3 behoben. Wenn es sich nicht anders vermeiden lässt, benutzt dann ersatzweise imagecopy(), der das gleiche tut, allerdings ohne
Transparenzfunktion.
Einführung in die gdLib | Version 2.0 alpha | 2005-10-07