Wasserzeichen für hochgeladene Bilder in beliebigen Content Management Systemen.

Bildbearbeitung 13 Comments
Wasserzeichen für hochgeladene Bilder in beliebigen Content Management Systemen.

Zum automatischen Integrieren von Wasserzeichen auf Contentbildern kann man diese bei der Ausgabe bearbeiten. Dazu ist nur ein kleines Script und eine Zeile in der .htaccess notwendig.

Das Script speichert man als “watermark.php” ab. Die Parameter sind natürlich beliebig anpassbar, welcher Parameter was für das Wasserzeichen macht, ist im Code beschrieben.

[php]

<?php
/**********************************************
*** Automatic Watermark for Content Images ***
***********************************************
*** ***
*** to be used on any CMS. ***
*** do not forget to alter your .htaccess ***
*** to rewrite the image paths ***
*** to this watermark.php ***
*** ***
*** Author: Thomas ‘Fischi!’ Fischer, 2010 ***
*** based on an idea by webmastersucks.com ***
*** http://www.fischi.cc/ ***
*** ***
**********************************************/

// set the header to jpg output, and get the url of the image wth the src parameter.
header(‘Content-type: image/jpeg’);
$src = $_GET['src'];

// Check the Imagesize – and insert the right watermark for the right sizes.
// Here on my blog: Thumbnails are processed with a frame and shadow,
// small images with a watermark where just my logo is shown
// and big images with the logo and url. other small images are left untouched.
$origsize = getimagesize($src);

// set the right watermarks
if (eregi("120×120", $src)) {
$watermark = imagecreatefrompng(‘http://www.fischi.cc/wp-content/themes/fischi/images/frame.png’);
} else if ($origsize[0] < 160 && $origsize[1] < 160) {
$skip = "true";
} else if ($origsize[0] < 400) {
$watermark = imagecreatefrompng(‘http://www.fischi.cc/wp-content/themes/fischi/images/justhead.png’);
} else {
$watermark = imagecreatefrompng(‘http://www.fischi.cc/wp-content/themes/fischi/images/watermark.png’);
}

// create the temporary image. alter the if parameters,
// if you don’t want to process some images, for example transparent png’s.
// of course, there should not be too much trouble with content images.
if(eregi(‘.gif’,$src)) {
$image = imagecreatefromgif($src);
} elseif(eregi(‘.jpeg’,$src)||eregi(‘.jpg’,$src)) {
$image = imagecreatefromjpeg($src);
} elseif(eregi(‘.png’,$src)) {
$image = imagecreatefrompng($src);
} else {
exit("Your image is not a gif, jpeg or png image. Sorry.");
}

// just process the image, if a watermark has to be integrated.
if ($skip != "true") {

// watermark sizes. strongly recommended to be computed, not set statically.
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);

// get the position of the watermark. calculated from the size of the original image,
// minus the size of the watermark. feel free to adjust these parameters.
// for example, if you want the watermark to be displayed on the top left,
// just set them both to zero. the last parameter (-0) gives you the option of leaving
// a space between the end of the image and the watermark (kind of the margin in css)
$dest_x = $origsize[0] – $watermark_width – 0;
$dest_y = $origsize[1] – $watermark_height – 0;

// putting the watermark on the original image
imagecolortransparent($watermark, imagecolorat($watermark,0,0));
imagecopyresampled($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $watermark_width, $watermark_height);

}

// direct output of the image, as jpg. adjust the last parameter to set the quality.
imagejpeg($image, "", 95);

// cleaning out the temporary files.
imagedestroy($image);
imagedestroy($watermark);

?>
[/php]

Danach fügt man in die .htaccess folgende Zeile hinzu. Dieses Beispiel ist für die Integration des Wasserzeichens in WordPress. Das ganze funktioniert natürlich auch für alle anderen Systeme wie Joomla, SixCMS, Drupal, Mambo etc. Der Trick ist, durch einen regulären Ausdruck die Bilder, die im Uploadverzeichnis liegen, auf die eben erstellte watermark.php umzuleiten, und die Quelle des Bildes als Parameter mitzugeben. VORSICHT: Bitte aufpassen, dass die Bilder des Templates, das benutzt wird, nicht aus dem Uploadverzeichnis stammen, sonst gibt es das Wasserzeichen bei ALLEN Bildern, nicht nur denen im Content.

[php]

RewriteRule ^(.*)wp-content/uploads/(.*) $1watermark.php?src=wp-content/uploads/$2

[/php]

Have Fun!
Manchmal zahlt es sich doch noch aus, PHP zu verstehen, und nicht nur Plugins zusammenzukopieren :) Die meisten WordPress Plugins zum Thema Wasserzeichen/Watermark arbeiten direkt in WordPress, im Gegensatz zu dieser Lösung, welche unabhängig von einem WordPress Watermark Plugin funktioniert. Und flexibler ist es auch noch :)

13 Responses to “Wasserzeichen für hochgeladene Bilder in beliebigen Content Management Systemen.”

  1. Berni Antworten

    Beim Test des Skripts ( wie am 20.01.2011 beschrieben) kommt bei mir die Fehlermeldung
    Parse error: syntax error, unexpected ‘:’ in ……../watermark.php on line 20

    Ich finde den Fehler nicht.
    Woran kann das liegen?

    Viele Grüsse
    Berni

  2. Oliver Antworten

    Ping, Schub’s, Hallo?

    Hallo Fischi,
    ich hoffe es geht Dir gut :-)
    Wollte einfach mal das Thema WordPressplugin in Erinnerung bringen ;-)

    LG Oliver

  3. Poggi Antworten

    Habs gefunden.

    1. Fehler der benötigte Speicher war für die Bildgröße (1,8 MB) zu klein. (Bildformat verkleinert)

    2.Die Pfadangaben passten nicht wenn die Bilddateien nicht im selben Pfad liegen. (das hab ich über die .htaccess angepasst)

    Danke für dieses Script!

    Gruß
    Thomas

    • fischi Antworten

      alles klar, fein dass du das selber gleich draufgekommen bist, weil ich durch meine derzeitigen Projekterln vergessen habe, die Kommentare zu checken.

      Hoffe, dass es dir jetzt gut passt. Ich werde in mittlerer Zukunft auch ein WordPressplugin für dieses Script schreiben, damit es leicht verfügbar ist.

      Viel Spaß inzwischen!

      Lg Fischi

  4. Poggi Antworten

    Hallo fischi,

    bei mir läuft das irgendwie nicht.
    Ich habe die original watermark.php ins root gelegt und versuche sie mit [root]/watermark.php?src=http://www.ffw-asse.de/images/sz-denkte_ehrungen.jpg aufzurufen.

    Das Ergebnis lautet: Die Grafik “…/watermark.php?src=http://www.ffw-asse.de/images/sz-denkte_ehrungen.jpg” kann nicht angezeigt werden, weil sie einenFehler enthält.

    Das gleiche auf einem 2. Server beim selben Provider aber höherwertiges Paket.

    Wo mache ich den Fehler?

    Gruß
    Thomas

    • fischi Antworten

      hi oliver!
      das wäre auf jeden fall eine variante. ich plane gerade, dieses script auch in wordpress-plugin form zu programmieren, damit man gar nichts mehr selbst eintragen muss. dann kommt auf jeden fall das schriftzug wasserzeichen hinzu.

      lg fischi

  5. Oliver Antworten

    Hallo Fischi,

    super Script und genau das was ich gesucht habe. Bin ich froh das ich es gefunden habe und das jemand genau meine Vorstellung von sowas umgesetzt hat.

    Ich musste erstmal etwas an ein paar Sicherheitseinstellungen auf dem Server drehen, das es läuft.

    Danke,
    Oliver

    • fischi Antworten

      Danke Oliver, sowas hört man gerne :)

      ich werde bald das Script updaten – zusammen mit dem Relaunch meiner Website, dann gibts noch mehr Optionen dazu!

      Bis bald

      Lg Fischi

  6. Lars Antworten

    Hi, sehr cooles “Plugin”. Danke dafür!
    Funktioniert auch alles, nur weiss ich leider nicht, wie man das tatsächlich auf Bilder beschränken kann?
    Und zwar funktionieren jetzt z.B. “mp3s” im Upload Ordner von WordPress nicht mehr, da die auch durch das watermark.php Skript geschleift werden.
    Wie umgehe ich denn das?
    Einfach ein “.jpg” in der htaccess datei hinten dran funktioniert bei mir nicht… Vielen Dank im Voraus!

    • fischi Antworten

      Servus Lars!

      stimmt, an diesen Fall habe ich bei meinem Blog nicht gedacht, da ich nur Bilder hochlade.

      Dies kannst du so umleiten:
      RewriteRule ^(.*)wp-content/uploads/(.*)\.(jpeg|jpg|gif|bmp|png) $1watermark.php?src=wp-content/uploads/$2.$3

      Wenn du magst, kannst du auch die gif’s rausnehmen, da sonst die animationen verloren gehen.

      Funktioniert das für dich?

      Lg fischi

  7. Frank Antworten

    Moin Fischi,

    ich habe die watermark.php erst mal zum Testen so gelassen, die htaccess habe ich auch erstellt.
    Leider ist kein Wasserzeichen zu sehen, nachdem ich ein Foto hochgeladen habe.
    Kann es daran liegen, dass ich noch lokal mit XAMPP teste?

    Beste Grüße
    Frank

    • fischi Antworten

      Das Skript selbst (die watermark.php) läuft bei dir, oder? Ansonsten kannst du das einfach testen: Wenn du die Watermark.php mit dem $_GET-Parameter src aufrufst, kommt nur das von dir gewünschte Bild.
      also [adresse]/watermark.php?src=http://www.t-ng.at/images/static/tng-party.jpg

      Falls das mit der originalen watermark.php gemacht wird, sollte nun auf dem Bild meiner Band rechts unten mein Logo zu sehen sein. Wenn das funktioniert, sind wir schon auf dem richtigen Weg.

      Original:
      http://www.t-ng.at/images/static/tng-party.jpg
      Mit meiner Watermark.php schaut das so aus:
      http://www.fischi.cc/watermark.php?src=http://www.t-ng.at/images/static/tng-party.jpg

      Die Rewrite Rule macht hier folgendes:
      Damit automatisch alle Bilder, die auf deiner Seite verwendet werden, durch die watermark.php geschickt werden, brauchen wir eine Rewriterule, die das Verzeichnis der Bilder aus den aufgerufenen Bildern erkennt, und auf die watermark.php umleitet, so dass das Skript das Wasserzeichen darüberlegt.
      Da auf dem WordPress System die watermark.php im Root-Verzeichnis abgespeichert ist, kann ich die src für das Bild einfach auf den relativen Dateipfad setzen.
      Falls das hier Probleme macht, oder die Bilder, die du
      RewriteRule ^(.*)wp-content/uploads/(.*) $1watermark.php?src=wp-content/uploads/$2

      Durch das Arbeiten mit relativen Dateipfaden sollte es egal sein, dass du lokal auf dem XAMPP arbeitest.

Hinterlasse eine Antwort