Bilder on-the-fly mit Wasserzeichen versehen

Hier möchte ich kurz einen Codesnippet vorstellen, mit dem man Bilder auf einem Webserver mit einem Wasserzeichen versehen kann, ohne die Bilder zu verändern.

Das Bild wird temporär erzeugt und es gibt keine Möglichkeit das Wasserzeichen auszublenden.

Gehen wir von folgender Ordnerstruktur aus:

/ **Hier liegen alle Dateien, wie z.b. index.php**
/img/galerie/ ** Hier liegen die Bilddateien**

Im Ordner /img/galerie/ liegen die Bilder inkl. Vorschaubilder. Vorschaubilder haben das Format thumb_{BILDNAME}.jpg, die großen Bilder {BILDNAME}.jpg

Erstellt nun im Hauptverzeichnis / eine PHP Datei mit dem Namen picture.php und folgendem Inhalt:

<?php
$img = htmlspecialchars($_GET[‚img‘]);
if($img!=str_replace(„http://“,““,$img)) { echo „Manipulation der URL!“; exit; }
if($img!=str_replace(„www.“,““,$img)) { echo „Manipulation der URL!“; exit; }
if($img!=str_replace(„ftp://“,““,$img)) { echo „Manipulation der URL!“; exit; }
$rootpath = „/absoluter/pfad/zum/webseitenverzeichnis/“;
$imgurl = $rootpath.$img;
if (file_exists($imgurl)) {
$img = $imgurl;
} else {
echo „Bilddatei nicht gefunden!“;
exit;
}
header(‚Content-Type: image/jpg‘);
header(‚Cache-Control: no-store, no-cache, must-revalidate‘); // HTTP/1.1
header(‚Cache-Control: pre-check=0, post-check=0, max-age=0‘); // HTTP/1.1
$imagesource =  $img;
$watermarkPath = „watermark.png“;
$filetype = substr($imagesource,strlen($imagesource)-4,4);
$filetype = strtolower($filetype);
$watermarkType = substr($watermarkPath,strlen($watermarkPath)-4,4);
$watermarkType = strtolower($watermarkType);
$image = @imagecreatefromjpeg($imagesource);
$watermark = @imagecreatefrompng($watermarkPath);
$imagewidth = imagesx($image);
$imageheight = imagesy($image);
$watermarkwidth =  imagesx($watermark);
$watermarkheight =  imagesy($watermark);
$startwidth = ($imagewidth – $watermarkwidth);
$startheight = ($imageheight – $watermarkheight);
imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
?>

Im Verzeichnis img/galerie erstellen wir nun eine .htaccess Datei, die direkten Zugriff auf die großen Bilder verhindert (da diese sonst ohne Wasserzeichen aufgerufen werden könnten). Die Vorschaubilder müssen erreichbar sein und sind von der Sperre ausgenommen:

Order deny,allow
Deny from all

<Files thumb*.jpg>
allow from all
</Files>

Die Bilder werden nun wie folgt aufgerufen

picture.php?img=/img/galerie/bild.jpg

Am unteren rechten Rand des Bildes ist nun das Wasserzeichen zu sehen. Das Script sollte natürlich ggf. noch abgesichert werden.

Für Fragen, bitte Kommentar posten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.