Einfügen von Wasserzeichen klappt nicht wie es soll...
Sibbl
- php
0 Sven Rautenberg0 Sibbl0 Sibbl0 Sibbl0 Tabellenkalk0 Sibbl
Hallo Leute,
ich hab da 2 kleine Probleme beim einfügen eines Wasserzeichens uns zwar:
1. Das Wasserzeichen hat nach dem einfügen einen Weißen Kasten obwohl es eigendlich einen Transparenten Hintergrund hat.
2. Wenn ich das Wasserzeichen auf kleinere Bilder einfügen möchte wird es garnicht angezeigt.
Ich hoffe das ihr mir da weiterhelfen könnt.
PHP:
<?PHP
$strImage = $_SERVER['DOCUMENT_ROOT'].'/bildergalerie/'.$_GET['folder']."/".$_GET['image'];
if( !file_exists( $strImage ) ) die("Das angegebene Bild existiert nicht!");
$strWatermark = $_SERVER['DOCUMENT_ROOT'].'/wasserzeichen.gif';
if( !file_exists( $strWatermark ) ) die("Das angegebene Wasserzeichen existiert nicht!");
$Transpares = 65;
list ( $Image_Width, $Image_Height, $Image_Type ) = getimagesize ( $strImage );
list ( $Watermark_Width, $Watermark_Height, $Watermark_Type ) = getimagesize ( $strWatermark );
$Watermark = imagecreatefromgif ( $strWatermark ) or die("Fehler bei imagecreatefromgif (Wasserzeichen)");
$Watermark_pos_x = $Image_Width - $Watermark_Width;
$Watermark_pos_y = $Image_Height - $Watermark_Height;
switch ( $Image_Type ){
case 1:
$Img = imagecreatefromgif ( $strImage ) or die("Fehler bei imagecreatefromgif");
break;
case 2:
$Img = imagecreatefromjpeg ( $strImage ) or die("Fehler bei imagecreatefromjpeg");
break;
case 3:
$Img = imagecreatefrompng ( $strImage ) or die("Fehler bei imagecreatefrompng");
break;
default;
die("Es gibt ein Problem bei switch von ImageCreate!");
}
imagecopymerge ($Img, $Watermark, $Watermark_pos_x, $Watermark_pos_y, 0, 0, $Image_Width, $Image_Height, $Transpares)
or die("Fehler bei imagecopymerge");
switch ( $Image_Type ){
case 1:
header ( 'content-type: image/gif' );
imagegif ( $Img );
break;
case 2:
header ( 'content-type: image/jpeg' );
imagejpeg ( $Img, '', $Transpares );
break;
case 3:
default:
header ( 'content-type: image/png' );
imagepng ( $Img );
}
imagedestroy ( $Img );
imagedestroy ( $Watermark );
imagedestroy ( $Watermark_out );
?>
Orginal Bild:
http://www.knappenverein-hamm-heessen.de/bildergalerie/2012-01-24_test4_l_Hamm/DSCI0496.jpg
Wasserzeichen:
http://www.knappenverein-hamm-heessen.de/wasserzeichen.gif
Bild mit Wasserzeichen:
http://www.knappenverein-hamm-heessen.de/setWatermark.php?folder=2012-01-24_test4_l_Hamm&image=DSCI0496.jpg
Bild klein mit Wasserzeichen:
http://www.knappenverein-hamm-heessen.de/setWatermark.php?folder=2012-01-24_test4_l_Hamm&image=thumb_DSCI0496.jpg
Danke euch schon mal allen für eure Hilfe.
Mfg
Moin!
ich hab da 2 kleine Probleme beim einfügen eines Wasserzeichens uns zwar:
- Das Wasserzeichen hat nach dem einfügen einen Weißen Kasten obwohl es eigendlich einen Transparenten Hintergrund hat.
imagecopymerge setzt die definierte Transparenz für alle Pixel des zu kopierenden Bildes. imagecopy macht das nicht. Wenn dein GIF also transparent ist, würde ich es mal mit imagecopy versuchen. Alpha-Transparenz wäre damit auch möglich, dazu brauchst du aber als Quellmaterial ein PNG (das macht auch für die Schrift bessere Ergebnisse, weil die Schriftgrenzen keinen Treppeneffekt machen), und musst als Ziel immer mit einem Truecolor-Bild arbeiten (imagecreatetruecolor), und dort hineinkopieren.
- Wenn ich das Wasserzeichen auf kleinere Bilder einfügen möchte wird es garnicht angezeigt.
Keine Ahnung, aber merkwürdige Rundungsfehler bei zu kleinem Kopieren eines großen Wasserzeichens würden mich nicht unbedingt wundern.
Wenn's nur um das Einfügen eines Schriftzuges geht, könntest du den Text ja auch mit den Textfunktionen reinschreiben.
- Sven Rautenberg
imagecopymerge setzt die definierte Transparenz für alle Pixel des zu kopierenden Bildes. imagecopy macht das nicht. Wenn dein GIF also transparent ist, würde ich es mal mit imagecopy versuchen. Alpha-Transparenz wäre damit auch möglich, dazu brauchst du aber als Quellmaterial ein PNG (das macht auch für die Schrift bessere Ergebnisse, weil die Schriftgrenzen keinen Treppeneffekt machen), und musst als Ziel immer mit einem Truecolor-Bild arbeiten (imagecreatetruecolor), und dort hineinkopieren.
Hey,
alos das mit dem imagecopy hab ich verstanden auch das ich ein png nehmen sollte ist mir jetzt klarr, aberan der Zusammensetzung der Bilder häng ich einwenig.
Also wenn ich dich richtig verstehe soll ich ein leeres Bild mit imagecreatetruecolor erzeugen und dort dann das Wasserzeichen und das Orginal reinkopieren. Richtig?
Hab das mal so probiert, aber das scheind nicht ganz richtig zu sein:
<?PHP
$strImage = $_SERVER['DOCUMENT_ROOT'].'/bildergalerie/'.$_GET['folder']."/".$_GET['image'];
if( !file_exists( $strImage ) ) die("Das angegebene Bild existiert nicht!");
$strWatermark = $_SERVER['DOCUMENT_ROOT'].'/wasserzeichen.png';
if( !file_exists( $strWatermark ) ) die("Das angegebene Wasserzeichen existiert nicht!");
list ( $Image_Width, $Image_Height, $Image_Type ) = getimagesize ( $strImage );
list ( $Watermark_Width, $Watermark_Height, $Watermark_Type ) = getimagesize ( $strWatermark );
$Watermark = imagecreatefrompng ( $strWatermark ) or die("Fehler bei imagecreatefromgif (Wasserzeichen)");
$Watermark_pos_x = $Image_Width - $Watermark_Width;
$Watermark_pos_y = $Image_Height - $Watermark_Height;
switch ( $Image_Type ){
case 1:
$Img = imagecreatefromgif ( $strImage ) or die("Fehler bei imagecreatefromgif");
break;
case 2:
$Img = imagecreatefromjpeg ( $strImage ) or die("Fehler bei imagecreatefromjpeg");
break;
case 3:
$Img = imagecreatefrompng ( $strImage ) or die("Fehler bei imagecreatefrompng");
break;
default;
die("Es gibt ein Problem bei switch von ImageCreate!");
}
$image = imagecreatetruecolor($Image_Width, $Image_Height);
imagecopy ($image, $Watermark, 0, 0, $Watermark_Width, $Watermark_Height, $Watermark_pos_x, $Watermark_pos_y)
or die("Fehler bei imagecopymerge");
imagecopy ($image, $Watermark, 0, 0, $Image_Width, $Image_Height, 0,0)
or die("Fehler bei imagecopymerge");
switch ( $Image_Type ){
case 1:
header ( 'content-type: image/gif' );
imagegif ( $Img );
break;
case 2:
header ( 'content-type: image/jpeg' );
imagejpeg ( $Img, '', $Transpares );
break;
case 3:
default:
header ( 'content-type: image/png' );
imagepng ( $Img );
}
imagedestroy ( $Img );
imagedestroy ( $Watermark );
imagedestroy ( $Watermark_out );
?>
Ausgabe:
Mfg
Edit:
Das einfügen funktioniert super, nur bei kleinen Bilderngibt es immer noch Probleme. Kann das da drann liegen das das Copyright zu groß ist und an das kleine Img angepasst werden müste? Wie müste ich das machen?
So siehts jetzt aus:
<?PHP
$strImage = $_SERVER['DOCUMENT_ROOT'].'/bildergalerie/'.$_GET['folder']."/".$_GET['image'];
if( !file_exists( $strImage ) ) die("Das angegebene Bild existiert nicht!");
$strWatermark = $_SERVER['DOCUMENT_ROOT'].'/wasserzeichen.png';
if( !file_exists( $strWatermark ) ) die("Das angegebene Wasserzeichen existiert nicht!");
list ( $Image_Width, $Image_Height, $Image_Type ) = getimagesize ( $strImage );
list ( $Watermark_Width, $Watermark_Height, $Watermark_Type ) = getimagesize ( $strWatermark );
$Watermark = imagecreatefrompng ( $strWatermark ) or die("Fehler bei imagecreatefromgif (Wasserzeichen)");
$Watermark_pos_x = $Image_Width - $Watermark_Width;
$Watermark_pos_y = $Image_Height - $Watermark_Height;
switch ( $Image_Type ){
case 1:
$Img = imagecreatefromgif ( $strImage ) or die("Fehler bei imagecreatefromgif");
break;
case 2:
$Img = imagecreatefromjpeg ( $strImage ) or die("Fehler bei imagecreatefromjpeg");
break;
case 3:
$Img = imagecreatefrompng ( $strImage ) or die("Fehler bei imagecreatefrompng");
break;
default;
die("Es gibt ein Problem bei switch von ImageCreate!");
}
$Img_new = imagecreatetruecolor($Image_Width, $Image_Height);
//Bild
imagecopy ($Img_new, $Img, 0, 0, 0, 0, $Image_Width, $Image_Height)
or die("Fehler bei imagecopymerge Bild");
//Wasserzeichen
imagecopy ($Img_new, $Watermark, $Watermark_pos_x, $Watermark_pos_y, 0, 0, $Watermark_Width, $Watermark_Height)
or die("Fehler bei imagecopymerge Wasserzeichen");
switch ( $Image_Type ){
case 1:
header ( 'content-type: image/gif' );
imagegif ( $Img_new );
break;
case 2:
header ( 'content-type: image/jpeg' );
imagejpeg ( $Img_new );
break;
case 3:
default:
header ( 'content-type: image/png' );
imagepng ( $Img_new );
}
imagedestroy ( $Img );
imagedestroy ( $Watermark );
imagedestroy ( $Img_new );
?>
PS: Im code vorher waren auch ein paar Fehler, sry dafür.
Edit:
Also das hab noch mal etwas drann gearbeitet und hab es auch jetzt geschaft das Wasserzeichen auf das kleine Bild zu legen, leider komm ich nciht draufwie ich die Prozentuale Größe für das Wasserzeichen errechne. Da bräuchte ich noch etwas Hilfe, so das das kleine Bild aussieht wie das große.
Code:
<?PHP
$strImage = $_SERVER['DOCUMENT_ROOT'].'/bildergalerie/'.$_GET['folder']."/".$_GET['image'];
if( !file_exists( $strImage ) ) die("Das angegebene Bild existiert nicht!");
$strWatermark = $_SERVER['DOCUMENT_ROOT'].'/wasserzeichen.png';
if( !file_exists( $strWatermark ) ) die("Das angegebene Wasserzeichen existiert nicht!");
list ( $Image_Width, $Image_Height, $Image_Type ) = getimagesize ( $strImage );
list ( $Watermark_Width, $Watermark_Height, $Watermark_Type ) = getimagesize ( $strWatermark );
$Watermark = imagecreatefrompng ( $strWatermark ) or die("Fehler bei imagecreatefromgif (Wasserzeichen)");
if(($Watermark_Width > $Image_Width) or ($Watermark_Height > $Image_Height)){
$width = $Image_Width /2;
$height = $Image_Height/4;
$Watermark_new = imagecreatetruecolor($width, $height)
or die("Fehler bei imagecreatetruecolor Wasserzeichen");
$img_colordepth = imagecolorstotal($Watermark);
if ($img_colordepth == 0 || $img_colordepth > 255)
$Img_new = imagecreatetruecolor($width, $height) or die("Fehler bei imagecreatetruecolor Wasserzeichen");
else
$Img_new = imagecreate($width, $height) or die("Fehler bei imagecreate Wasserzeichen");
imagealphablending($Watermark_new, false);
imagecopyresampled($Watermark_new, $Watermark, 0, 0, 0, 0, $width, $height, $Watermark_Width, $Watermark_Height);
imagesavealpha($Watermark_new, true);
$Watermark = $Watermark_new;
$Watermark_Width = $Image_Width /2;
$Watermark_Height = $Image_Height/4;
}
switch ( $Image_Type ){
case 1:
$Img = imagecreatefromgif ( $strImage ) or die("Fehler bei imagecreatefromgif");
break;
case 2:
$Img = imagecreatefromjpeg ( $strImage ) or die("Fehler bei imagecreatefromjpeg");
break;
case 3:
$Img = imagecreatefrompng ( $strImage ) or die("Fehler bei imagecreatefrompng");
break;
default;
die("Es gibt ein Problem bei switch von ImageCreate!");
}
$Img_new = imagecreatetruecolor($Image_Width, $Image_Height);
//Bild
imagecopy ($Img_new, $Img, 0, 0, 0, 0, $Image_Width, $Image_Height)
or die("Fehler bei imagecopymerge Bild");
//Position
$Watermark_pos_x = $Image_Width - $Watermark_Width;
$Watermark_pos_y = $Image_Height - $Watermark_Height;
//Wasserzeichen
imagecopy ($Img_new, $Watermark, $Watermark_pos_x, $Watermark_pos_y, 0, 0, $Watermark_Width, $Watermark_Height)
or die("Fehler bei imagecopymerge Wasserzeichen");
switch ( $Image_Type ){
case 1:
header ( 'content-type: image/gif' );
imagegif ( $Img_new );
break;
case 2:
header ( 'content-type: image/jpeg' );
imagejpeg ( $Img_new );
break;
case 3:
default:
header ( 'content-type: image/png' );
imagepng ( $Img_new );
}
imagedestroy ( $Img );
imagedestroy ( $Watermark );
imagedestroy ( $Img_new );
if(($Watermark_Width > $Image_Width) or ($Watermark_Height > $Image_Height))
imagedestroy($Watermark_new);
?>
Bild klein:
Bild groß:
Mfg
Hallo
, so das das kleine Bild aussieht wie das große.
ist das denn wirklich nötig? Thumbnails werden häufig ohne Wasserzeichen belassen.
Gruß,
Kalk
ist das denn wirklich nötig? Thumbnails werden häufig ohne Wasserzeichen belassen.
so gesehn hast du recht, aber wenn auch mal so kleine Bilder nicht als thumb vorkommen, dann steh ich immer noch vor dem Problem.