Watermark selbst gemacht

rainer_amler

Joined: 2005-11-16
Posts: 5
Posted: Fri, 2005-11-25 12:22

Hallo,

Hier meine Version um alle Files (leider nur die orginal-bilder, d.h. KEINE Resized-pictures!!) mit einer watermark zu versehen:

1. unter \modules\core findet Ihr das File "DownloadItem.inc"
2. diese Datei öffnen und folgende zeilen überarbeiten:

if ($fd = $platform->fopen($data['derivativePath'], 'rb')) {
while (true) {
$bits = $platform->fread($fd, 65535);
if (strlen($bits) == 0) {
break;
}
print $bits;
$gallery->guaranteeTimeLimit(30);
}
$platform->fclose($fd);
}

ersetzen durch:

if ($fd = $platform->fopen($data['derivativePath'], 'rb')) {
$image = imagecreatefromjpeg($data['derivativePath']);

$string = "was auch immer";
$orange = imagecolorallocate($image, 220, 210, 60);
$höhe = imagesy($image);
$breite = imagesx($image);
$weniger = 20;
$px = (imagesx($image) - 7.5 * strlen($string)) / 2;
imageline($image, 0, $höhe-$weniger, $breite, $höhe-$weniger, $orange);
imagestring($image, 5, $px, $höhe-$weniger+2, $string, $orange);

imagejpeg($image);
imagedestroy($image);
$platform->fclose($fd);
}

Mit den Parametern oben kann man noch ein wenig spielen um das gewünschte ergebnis zu erhalten.

ein funktionierendes Beispiel (meines :-) ) gibt's unter http://www.knallgelb.com

nicht vergessen, bei allen fotos die mit einer watermark versehen sind, sind die orginal-files!

Damit das passt habe ich alle alben gelöscht und neu raufgespielt, in meinem fall auf max. 470 pixel und keine resized verwendet (d.h. ausgeschalten).

lg
rainer

------------------------
http://www.knallgelb.com

 
Tim_j
Tim_j's picture

Joined: 2002-08-15
Posts: 6818
Posted: Fri, 2005-11-25 13:13

Hallo Rainer,

abgesehen davon, daß deine Version ein Hack ist, was ist das Problem mit dem Original Wasserzeichen Modul der G2 ?

Gruß,
Jens
--
Last Gallery v1 developer and translation manager.

 
rainer_amler

Joined: 2005-11-16
Posts: 5
Posted: Fri, 2005-11-25 13:58

Soviel ich weiss, wollten einige wissen wie man alle bilder mit einem wasserzeichen versieht. Auch Ich war so einer. Da ich keine andere lösung gefunden habe, habe ich diesen hack gemacht. vielleicht hilft der ja so manchem weiter.

gruß
rainer

------------------------
http://www.knallgelb.com

 
moonchild

Joined: 2006-03-07
Posts: 1
Posted: Wed, 2006-04-12 06:52

Der Hack ist eigentlich nicht schlecht. Allerdings gibt es Anzeigeprobleme mit Internet Explorer 6.0028 und anderen, (tanzende Bilder, ewiges Warten....), fehlerfreie Anzeige dagegen unter Firefox 1.07 und Konqueror 3.32. Jetzt nach dem Update auf GAllery 2.1 funktioniert nichts mehr, die DownloadItem.inc wurde auf Version 1.45 upgedatet, der Hack zeigt jetzt Copyrights völlig willkürlich an. :-(

Ich würde ein Update des Hacks außerordentlich begrüßen :-)

 
rainer_amler

Joined: 2005-11-16
Posts: 5
Posted: Wed, 2006-04-12 07:21

Hier das Update: (geht nicht mit der aktuellen 2.1!!)

Ich habe bei der 2.1 folgendes Problem: Teilweise werden die Bilder über die FUNCTION _SENDFILE() ausgegeben; manche nicht. wenn jemand weiss wo / was da genau aufgerufen wird, schreibt bitte; dann schau ich mir den code wieder an und kann vielleicht wieder was machen.

Ich nehme an, dass es was mit den Zwischenbildern zu tun hat, obwohl ich das eigentich abgeschalten habe. wie gesagt, please help!

hier ist die ganze funktion in downloaditem.inc:

damit sind auch alle darstellungsprobleme behoben :-)
viel spass beim ausprobieren; meinen namen würde ich halt auf euren ändern ;-)

function _sendFile($data) {
global $gallery;
$platform =& $gallery->getPlatform();

/* Make sure we have permission */
$permission = 'core.viewSource';
switch($data['derivativeType']) {
case DERIVATIVE_TYPE_IMAGE_THUMBNAIL:
$permission = 'core.view';
break;

case DERIVATIVE_TYPE_IMAGE_RESIZE:
$permission = 'core.viewResizes';
break;

/* DERIVATIVE_TYPE_IMAGE_PREFERRED uses core.viewSource */
}
$ret = GalleryCoreApi::assertHasItemPermission($data['parentId'], $permission);
if ($ret) {
return $ret->wrap(__FILE__, __LINE__);
}

header('Content-type: ' . $data['mimeType']);
header('Content-Disposition: inline; filename="' . $data['pseudoFileName'] . '"');
$stats = $platform->stat($data['derivativePath']);
if ($stats[7] > 0) {
header('Content-length: ' . $stats[7]);
}
header('Last-Modified: ' . GalleryUtilities::getHttpDate($stats[9]));
header('Expires: ' . GalleryUtilities::getHttpDate(time() + 31536000));

/*
* Don't use readfile() because it buffers the entire file in memory
* Profiling shows that this approach is as efficient as fpassthru()
* but we get to call guaranteeTimeLimit which prevents it from failing on
* very large files.
*/
if ($fd = $platform->fopen($data['derivativePath'], 'rb')) {
if($permission == 'core.view') {
while (true) {
$bits = $platform->fread($fd, 65535);
if (strlen($bits) == 0) {
break;
}
print $bits;
$gallery->guaranteeTimeLimit(30);
}
} else {
$image = imagecreatefromjpeg($data['derivativePath']);

$font = "/www/arial.ttf";
$fontsize = 12;
$copy = "©";
$string = $copy." Rainer Amler - www.knallgelb.com";
$orange = imagecolorallocate($image, 220, 210, 60);
$font_c = imagecolorallocate($image, 220, 210, 60);
$hoehe = imagesy($image);
$breite = imagesx($image);
$weniger = 5;
$px = (imagesx($image) - 7.5 * strlen($string)) / 2;
imagettftext($image, $fontsize, 0, 5, $hoehe-$weniger, $font_c, $font, $string);

imagejpeg($image);
imagedestroy($image);
}
$platform->fclose($fd);
}

return null;
}

------------------------
http://www.knallgelb.com