Veröffentlichungsdatum: 24. Juli 2014
Änderungsdatum: 22. Mai 2024
bilder picture image copyright wasserzeichen
Weblication® liefert Ihnen Werkzeuge dafür, um Bilder mit einem Wasserzeichen-Effekt bzw. Copyright-Hinweis zu versehen.
Weblication® liefert Ihnen Werkzeuge dafür, um Bilder mit einem Wasserzeichen-Effekt bzw. Copyright-Hinweis zu versehen.
Es gibt unterschiedliche Wege und Mittel, um Bilder entsprechend zu manipulieren und mit einem Wasserzeichen-Effekt oder mit einem Copyright-Vermerk zu versehen. Nachfolgend finden Sie entsprechende Möglichkeiten aufgelistet.
Um ein Copyright-Hinweis bereits in die Bilder einzufügen, die auf den Server hochgeladen werden, bieten sich die Verzeichnisereignisse an. Beim Hochladen von Bildern greifen Sie hierfür auf das onAfterUpload-Ereignis zurück, das Sie über die Verzeichniseinstellungen erreichen.
Das nachfolgende Beispiel setzt auf ImageMagick auf, welches ab Weblication® CMS-Version 9.x über die Systemeinstellungen aktiviert werden kann, wenn dies vom Webserver unterstützt wird. Stellen Sie daher zuvor sicher, daß Sie über die Funktionen von ImageMagick verfügen können.
Wenn Sie den nachfolgenden PHP-Code im Verzeichnisereignis onAfterUpload eines Verzeichnisses (z.B. /baseAssets/img/watermark) setzen, erfolgen zu Bildern beim Hochladen folgende Aktionen:
Beachten Sie bitte die Hinweise am Artikelende!
/* Dateinamen in Zufallsnamen umwandeln */
$pathSource = $eventData['filePath'];
$fileNameDest = time().'-'.rand();
wRepository::renameDocument($pathSource, $fileNameDest.'.'.wPathName::getFileExtension($pathSource));
$path = $eventData['dirPath']."/".$fileNameDest.".".wPathName::getFileExtension($pathSource);
/* Watermark/CopyrightText über imageMagick setzen: */
//$path = $eventData['filePath'];
$text = "© Mustermann AG";
//Schrifteigenschaften
$fontfamily = "Bookman-DemiItalic"; /*hängt ab von den auf dem Server installierten Schriftarten*/
$fontsize = "12";
//Farbe Schatten
$color = '#666666';
$strokewidth = '1';
$x = '11';
$y = '10';
//Farbe Schrift
$color_s = '#FFFFCC';
$strokewidth_s = '1';
$x_s = '11';
$y_s = '10';
$system = '/usr/bin/convert "'.$_SERVER['DOCUMENT_ROOT'].$path.'" -font '.$fontfamily.' -pointsize '.$fontsize.' -draw "gravity SouthEast fill \''.$color.'\' text 11,12 \''.$text.'\' fill \''.$color_s.'\' text 10,11 \''.$text.'\'" "'.$_SERVER['DOCUMENT_ROOT'].$path.'"';
@exec($system);
return wPathName::removeDocumentRoot($path);
Sie können bereits mit Bordmitteln von Weblication® einen Copyright-Hinweis in zu generierende Bilder setzen. Das aktuelle Weblic® "Bild" unterstützt dies in aktueller Version bereits im Standard.
Die BASE Classic liefert Ihnen hierzu bereits im Standard das Bild-Element als Weblic® schon entsprechend vorbereitet aus. In der design.css sind die Einträge hierzu bereits gesetzt, nur im Standard erstmal deaktiviert (-w-editmaskExtended-copyrighttext:no;-w-addCopyright:no). Diese CSS-Only-Werte setzen Sie jeweils auf yes, damit das Eingabefeld für den Copyright Text ersichtlich ist und ein gesetzter Text auch beim Generieren des Bildes in das Bild geschrieben wird (siehe Quelltextbeispiel unten).
/*@wCssFragment{class:elementPicture;variant:0;caption:Standardarstellung;caption-en:Default}*/ .elementPicture_var0 {-w-editmaskExtended-copyrighttext:yes;-w-addCopyright:yes}
Beachten Sie bei dieser Umsetzung, daß das Originalbild nicht manipuliert wird, sondern nur das über das Bild-Element an entsprechender Stelle gesetzte und generierte Bild mit dem Copyright-Text versehen wird!
Beachten Sie zudem die Hinweise am Artikelende!Bei der BASE (Mobile First) verhält es sich ähnlich wie zuvor zur BASE Classic beschrieben. Allerdings haben Sie dort nochmals mehr Möglichkeiten der Einstellungen. So lässt sich z.B. auch die Position des Copyright-Textes etc. einstellen.
Die BASE (Mobile First) ermöglicht zudem den Einsatz von CSS-Only-Untervarianten des Bildes (z.B. elementPictureTitle_var72 ("Mit Copyright auf dem Bild")). Auf diese Weise können Sie den Copyright-Vermerk über CSS gestalterisch flexibel an Ihre Vorstellungen anpassen.
Diese Copyright-Angabe wird über das Bild gelegt und überdeckt einen ggf. direkt ins Bild generierten Vermerk.
Soll der Hinweis lediglich per CSS über das Bild gelegt werden, setzen Sie in der Variante die Angabe so:
-w-addCopyright:onlyInCaption;
Alternativ zum vorherigen Punkt 2. können Sie das Weblic® Bild-Element auch über Projekt-Funktionen für das Schreiben eines Copyright-Textes ins Bild erweitern. Über die design.css darf bzw. sollte in diesem Fall der Copyright-Text nicht hinzugefügt werden, da ansonsten der Copyright-Text zweimal in das Bild generiert wird.
Die aktuelle BASE Classic wird so ausgeliefert, daß über das Weblic® Bild-Element abgefragt wird, ob es eine Projekt-Funktion "wMyProject::adaptImageAfterCreated" gibt. Sofern diese in der wMyProject.php des Projektes vorhanden ist, wird die Rückgabe des Bildpfades aus dieser Funktion erwartet.
Ebenso wird die aktuelle BASE Classic bereits mit einer wMyProject.php Datei ausgeliefert, die beispielhaft die Funktion "wMyProject::adaptImageAfterCreated" schon gesetzt hat. Ggf. müssen Sie diese "aktiv" schalten, also den Unterstrich vor dem Funktionsnamen (_adaptImageAfterCreated) entfernen.
Wenn Sie diese nutzen wollen, müssen Sie lediglich die Variable $GDorIM mit dem gewünschten Wert befüllen (z.B. bei ImageMagick: "im") und die Variable $text mit Ihrem Copyright-Text befüllen (siehe Quelltextbeispiel unten). Dann wird ein über Bild-Element generiertes Bild mit den dort hinterlegten Funktionen und Parametern (zu GD bzw. ImageMagick) mit Copyright-Text gesetzt.
Die Eigenschaften der Schrift, etc. werden über die Parameter-Angaben für ImageMagick bzw. GD definiert und sind individuell einstellbar.
//*********************************************************************************/
/**
* @method String adaptImageAfterCreated(String $path)
*
* @description Callback Funktion, um ein Bild nachträglich anzupassen
*
* @param path Pfad des Bildes
*
* @param options Einstellungen bzw. Bilddaten
*
* @return String
*
*/
//*********************************************************************************/
public static function adaptImageAfterCreated($path, $options){
//print "adaptImageAfterCreated($path);\n";
//var_dump($options);
//######################################################################################################
//### ###
//### WICHTIG: $pathAdapted muss angepasst werden, da sonst das Originalbild überschrieben wird!!! ###
//### ###
//######################################################################################################
$GDorIM = "gd"; // "gd" für Nutzung von GD und "im" für Nutzung von imageMagick
$text = "© ".($options['copyrightText'] ?? ''); // Text über Angabe im Bild-Element gesetzt
//$text = "© Mustermann AG"; // Direktangabe, z.B.: "(c) Mustermann AG"
$pathAdapted = preg_replace('/\.([^\.]+)$/', '-a.$1', $path);
$textMarginRight = 10;
$textMarginBottom = 0;
if($options['fontcolor'] == ''){
$fontcolorVal = self::hex2rgba('#000000');
}
else {
$fontcolorVal = self::hex2rgba($options['fontcolor']);
}
if($options['fontsize'] == ''){
$fontsize = 10;
}
if(is_file($_SERVER['DOCUMENT_ROOT'].$pathAdapted)){
return $pathAdapted;
}
if(is_file($_SERVER['DOCUMENT_ROOT'].$path) && $text != ''){
/* Manipulation über GD */
if($GDorIM == 'gd'){
$extension = wPathName::getFileExtension($path);
$extension = strtolower($extension);
//Erstellen eines IMG - Objektes ausgehend von einem bestehenden
if($extension == 'png'){
$image = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].$path);
imageAlphaBlending($image, false);
imageSaveAlpha($image, true);
}
else if($extension == 'jpg' || $extension == 'jpeg'){
$image = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].$path);
}
else if($extension == 'gif'){
$image = imagecreatefromgif($_SERVER['DOCUMENT_ROOT'].$path);
}
//Farben
$white = imagecolorallocatealpha($image, 255, 255, 255, 100);
$shadowcolor = imagecolorallocate($image, 255, 255, 255);
$fontcolor = imagecolorallocate($image, $fontcolorVal[0], $fontcolorVal[1], $fontcolorVal[2]);
//Pfad zu der Font-Datei
$font = $_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/fonts/default.ttf';
//Zeichnen:
$x = $options['pictureWidth']/2;
$y = $options['pictureHeight']/2;
$dimensions = imagettfbbox($fontsize, 0, $font, $text);
$textWidth = abs($dimensions[4] - $dimensions[0]);
$textHeight = abs($dimensions[5] - $dimensions[1]);
$x = imagesx($image) - $textWidth - $textMarginRight;
$y = imagesy($image) - $textHeight - $textMarginBottom;
//Schatten (versetzt zu Text)
imagettftext($image, $fontsize, 0, $x, $y, $shadowcolor, $font, $text);
//Text
imagettftext($image, $fontsize, 0, $x-1, $y, $fontcolor, $font, $text);
//Erstelle Datei
imagepng($image, $_SERVER['DOCUMENT_ROOT'].$pathAdapted);
//Löschen des img-Objektes
imagedestroy($image);
$path = $pathAdapted;
return $path;
}
/* Manipulation über imageMagick */
else if($GDorIM == 'im'){
copy($_SERVER['DOCUMENT_ROOT'].$path, $_SERVER['DOCUMENT_ROOT'].$pathAdapted);
$pathSource = $path;
$pathDest = $pathAdapted;
//Schrifteigenschaften
$fontfamily = $_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/fonts/default.ttf';
//Farbe Schatten
$color = '#666666';
$strokewidth = '1';
$x = '11';
$y = '10';
//Farbe Schrift
$color_s = '#FFFFCC';
$strokewidth_s = '1';
$x_s = '11';
$y_s = '10';
$system = '/usr/bin/convert convert "'.$_SERVER['DOCUMENT_ROOT'].$pathSource.'" -font '.$fontfamily.' -pointsize '.$fontsize.' -draw "gravity SouthEast fill \''.$color.'\' text 11,12 \''.$text.'\' fill \''.$color_s.'\' text 10,11 \''.$text.'\'" "'.$_SERVER['DOCUMENT_ROOT'].$pathDest.'"';
@exec($system);
return wPathName::removeDocumentRoot($pathAdapted);
}
else{
return $path;
}
}
else{
return $path;
}
}
In der BASE (Mobile First) wird aufgrund der schon im Standard gelieferten Funktionen die zuvor genannte Möglichkeit nicht mitgeliefert.
Bildergalerien können Sie durch manuelle Anpassung des entsprechenden Templates (hier: gallery.wFilelist.php) mit der Möglichkeit eines Copyright-Textes erweitern.
Erweitern Sie hierzu den entsprechendenen wsl:thumbnail Aufruf durch das copyrightText-Attribut und den gewünschten Text (siehe Beispiel unten). Je nach gewählter Galerie-Variante sollten Sie berücksichtigen, daß nicht alle Bilder einer Variante (optimal) mit dem entsprechenden Copyright-Text versehen werden können!
... <!-- Bild --> <wsl:thumbnail class="listEntryImage" copyrightText="© Mustermann AG" src="{@path}" hd="{/wFilelist/wData/data[@name='createHD']/text()}" lazyLoad="{/wFilelist/wData/data[@name='lazyLoad']/text()}" width="{//data[@name = 'pictureWidth']/text()}" height="{//data[@name = 'pictureHeight']/text()}" quality="{php:functionString('wVariables::getValue', 'thumbnails_quality', '/baseGlobal', '')}" mode="{//data[@name = 'pictureMode']/text()}" backgroundColor="{//data[@name = 'pictureBackgroundColor']/text()}" alt="{php:functionString('htmlspecialchars', $listEntryTitle)}" title="{php:functionString('htmlspecialchars', $listEntryTitle)}"/> ...
In der BASE (Mobile First) können Sie zu jeder Bildergalerie-Variante über CSS-Only festlegen, ob ein Copyright-Text ausgegeben werden soll. Es muss hierzu nichts in den Templates erweitert werden.
In der BASE (Mobile First) können Sie zu jeder Listen-Variante, welche eine Thumbnail-Untervariante für Vorschaubilder nutzt, über CSS-Only festlegen, ob ein Copyright-Text ausgegeben werden soll.
Aktivieren Sie dies einfach zur entsprechenden Thumbnail-Untervariante.
Bei Bild-Manipulationen über ausgelagerte Funktionen (z.B. Verzeichnisereignis bzw. wMyProjekt-Funktionen) können Sie individuellste Anpassungen zu den generierten Bildern vornehmen. So lassen sich über ImageMagick z.B. auch Polaroid-Darstellungen von Bildern realisieren und vieles mehr!