Wiedereinmal Wasserzeichen mit GD und einem Problem

bensky

Erfahrenes Mitglied
Hi,
PHP:
<?php

$f1     = "1.jpg";       // dat bild
$f2     = "ama_wz.gif";  // wasserzeichen
$align  = "left";        // Horizontal(left, center, right)
$valign = "top";         // Vertical(top, middle, bottom)
$alpha  = "80";          // Transparenzwert des WZ
//$t    = "";            // Transparente farbe für das wssezeichen

/* für die transparenz des WZ */
$alpha = (($alpha=="")?48:$alpha);

$im1 = imagecreatefromjpeg($f1);
$im2 = imagecreatefromgif($f2);

$s1  = getimagesize($f1);
$s2  = getimagesize($f2);


if ( $t != "" )
{
	/* *truecolor oder nich **/
	if ( imageistruecolor($im2) )
		$col = imagecolorallocate($im2, hexdec(substr($t,0,2)), hexdec(substr($t,2,2)), hexdec(substr($t,4,2)));
	else
		$col = imagecolorexact($im2, hexdec(substr($t,0,2)), hexdec(substr($t,2,2)), hexdec(substr($t,4,2)));

	/*transparente farbe setzen */
	imagecolortransparent($im2, $col);
}

/* Position berechnen und wz auf x,y setzen */
if ( $align == "left" )        $x = 0;
elseif ( $align == "right" )   $x = $s1[0] - $s2[0];
else                           $x = ($s1[0] - $s2[0]) / 2;
if ( $valign == "top" )        $y = 0;
elseif ( $valign == "bottom" ) $y = $s1[1] - $s2[1];
else                           $y = ($s1[1] - $s2[1]) / 2;

/* beide bilder verbinden */

imagecopymerge($im1, $im2, $x, $y, 0, 0, $s2[0], $s2[1], $alpha);

/* hier das bild ohne WZ durch das mit wz ersetzen*/
imagejpeg($im1);

?>

Habe dieses Script geschrieben das mir ein Bild mit nem Wasserzeichen versehen soll.
Leider funktioniert es nicht richtig, ich finde den fehler nicht....

Es soll garnix ausgeben, nur das bild mit WZ versehen aber es gibt immer son kram aus wie
Ýis?Xª€Ã€?óÚ?l_‘9f=zš

Wo liegt mein Fehler? Dank im Voraus.
 
Hallo!

Nun, Du sagst der Funktion imagejpeg() ja auch nicht dass das Bild gespeichert werden soll..... somit wird die Ausgabe zwangsweise an den Browser geschickt.
Und der Zeichensalat resultiert daraus dass der Content-Type bei der Ausgabe nicht mitgesendet wird.

Gruss Dr Dau
 
Ja ,aäh das ist richtig, ich hatte das script für on-the-fly wasserzeichen gecodet;)

Aber wie speicher ich das bild denn unter dem selben Namen?

imagecopymerge($f1, $im1); // irgedwie so?

bzw. imagejpeg($f1, $im1); ?
 
Also wenn, dann müsste es eher so heissen:
PHP:
imagejpeg($im1, $f1);
Ich bin mir aber nicht sicher ob das Originalbild einfach überschrieben werden kann.
Wenn nicht, dann müsste es so heissen:
PHP:
imagejpeg($im1, "/pfad/zum/neuen/bild.jpg");
Als 3. Parameter kannst Du auch noch die Qualität angeben.
Per default wird (wenn ich es richtig im Kopf habe) 75 genommen..... wenn Du also z.b. 85 nimmst, dann hat das Bild eine bessere Qualität.

[edit]
Alternativ, wenn Du das Bild in einem neuen Verzeichnis speichern willst aber den alten Dateinamen verwenden willst, kannst Du es auch so machen:
PHP:
imagejpeg($im1, "/pfad/zum/neuen/verzeichnis/".$f1);
Dann darf $f1 aber nur den Dateinamen (ohne Pfadangabe) enthalten.
[/edit]
 
Zuletzt bearbeitet:
Ja ,aäh das ist richtig, ich hatte das script für on-the-fly wasserzeichen gecodet;)

also wenn du das per
Code:
<img src="dein_script.php" />
einfügst rate ich dir ganz als erste php-codezeiel folgendes zu schreiben:
PHP:
<?php
// add
header('Content-type: image/jpeg');
// stop add

$f1     = "1.jpg";       // dat bild
$f2     = "ama_wz.gif";  // wasserzeichen
$align  = "left";        // Horizontal(left, center, right)
$valign = "top";         // Vertical(top, middle, bottom)
$alpha  = "80";          // Transparenzwert des WZ
//$t    = "";            // Transparente farbe für das wssezeichen
[...]
imagejpeg($im1);

?>
man kann auch image/gif oder image/png nutzen ;)
 
Zuletzt bearbeitet:
Zurück