kostenloser Webspace werbefrei: lima-city


Wasserzeichen in Bilder einfügen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    chst

    chst hat kostenlosen Webspace.

    Hallo liebe Leute!!

    Für mein Fotoalbum plane ich, sämtliche Bilder automatisch auf Thumbnails und gleichmäßig verkleinerte "Originalbilder" zu verkleinern. Dies erfolgt mittels ImageCreateFromJpeg und funktioniert ganz gut. Wie kann ich jetzt aber ein Wasserzeichen (im Idealfall eine GIF-Datei mit transparentem Hintergrund) in meine Bilder bekommen? Direkt beim erstellen bzw verkleinern, oder bei jeder Anzeige? Und wie?

    Vielen Dank!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich löse das Wasserzeichen-Problem wie folgt:

    $image = @imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].'/bild.jpg');
    $bildmasse = @getimagesize($_SERVER['DOCUMENT_ROOT'].'/bild.jpg');
    if($bildmasse[0]>=200 && $bildmasse[1]>=200)    // Nur bei größeren Bildern ein Wasserzeichen aupappen
    {
    	$wasserzeichen = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].'/Watermark.png');
    	$watermark_width = imagesx($wasserzeichen);  
    	$watermark_height = imagesy($wasserzeichen);
    
    	$rand    = 7;
    	$abstand = 15;
    
    	$dest_x = $bildmasse[0] - $watermark_width - $rand - $abstand;  
    	$dest_y = $bildmasse[1] - $watermark_height - $rand - $abstand;
    
    	// Farbwerte reservieren
    	$grey   = imagecolorallocatealpha($image, 230, 230, 230, 75);
    
    	$untere_ecke[0] = ($bildmasse[0]-2*$rand-$watermark_width-$abstand);
    	$untere_ecke[1] = ($bildmasse[1]-$abstand);
    	$obere_ecke[0]  = ($bildmasse[0]-$abstand);
    	$obere_ecke[1]  = ($bildmasse[1]-2*$rand-$watermark_height-$abstand);
    	imagefilledrectangle($image, $untere_ecke[0], $untere_ecke[1], $obere_ecke[0], $obere_ecke[1], $grey);
    	//imagefilledrectangle($image, 30, 30, 70, 70, imagecolorallocatealpha($image, 255, 0, 0,75));
    
    	imagecopymerge($image, $wasserzeichen, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
    	imagedestroy($wasserzeichen);
    }

    Dabei wird ein Wasserzeichen aus einer PNG-Datei geladen und in die untere rechte Ecke gesetzt. Zusätzlich wird ein grauer, transparenter Kasten darunter gelegt (75% Transparenz).

    Direkt beim erstellen bzw verkleinern, oder bei jeder Anzeige? Und wie?

    Am besten ist, Du machst das direkt nach dem Hochladen der Bilder. Sobald sie Deiner Galerie hinzugefügt werden und Du die Vorschaugrafiken erstellst, kann auch das Wasserzeichen drauf. Dann werden Ressourcen gespart. Vorschaugrafiken sollten ja auch nicht on-the-fly bei jeder Anzeige erstellt werden.

    Beitrag zuletzt geändert: 3.10.2010 18:12:01 von rnitsche
  4. Autor dieses Themas

    chst

    chst hat kostenlosen Webspace.

    Die Vorschaugrafiken werden bei mir eh auch gleich bei der Gallerie-Erstellung verkleinert, aber vielen Dank für den Tipp!

    Und auch vielen Dank für deinen Quelltext! Muss gestehen, dass ich den jetzt auf den 1. Blick nicht zu 100% verstanden habe, werde ihn aber schön langsam aufarbeiten, mag ja auch was daraus lernen!

    Fürs Erste vielen Dank, und ich melde mich wieder, wenn noch Fragen auftauchen sollten!
  5. Gern geschehen. Zum besseren Verständnis: Das meiste oben ist nur die Positionsberechnung, da um das Wasserzeichen ja noch die graue Box liegt. Daher ist $abstand der Abstand in Pixeln zum tatsächlichen Bildrand. $rand ist der Abstand in Pixeln, die die transparente Box über das Wasserzeichen hinausragen soll.

    So sieht's dann übrigens aus...
  6. wow sowas hilft mir zum späteren zeitpunkt auch super
  7. Autor dieses Themas

    chst

    chst hat kostenlosen Webspace.

    Hallo!

    Ich bins nochmal :), bin leider wirklich zu doof, obwohl ich den Quelltext ja eigentlich bloß anwenden müsste...
    $image = @imagecreatefromjpeg('1.jpg');
    $bildmasse = @getimagesize('1.jpg');
    if($bildmasse[0]>=200 && $bildmasse[1]>=200)    // Nur bei größeren Bildern ein Wasserzeichen aupappen
    {
        $wasserzeichen = imagecreatefrompng('logo.png');
        $watermark_width = imagesx($wasserzeichen);
        $watermark_height = imagesy($wasserzeichen);
    
        $rand    = 7;
        $abstand = 15;
    
        $dest_x = $bildmasse[0] - $watermark_width - $rand - $abstand;  
        $dest_y = $bildmasse[1] - $watermark_height - $rand - $abstand;
    
        $untere_ecke[0] = ($bildmasse[0]-2*$rand-$watermark_width-$abstand);
        $untere_ecke[1] = ($bildmasse[1]-$abstand);
        $obere_ecke[0]  = ($bildmasse[0]-$abstand);
        $obere_ecke[1]  = ($bildmasse[1]-2*$rand-$watermark_height-$abstand);
    
        imagecopymerge($image, $wasserzeichen, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
        imagedestroy($wasserzeichen);
    }

    Also ich hab die Datei 1.jpg und logo.png. Mittels imagecopymerge wird das Logo ja reinkopiert, eigentlich in das Originalbild soweit ich das verstanden hab, aber irgendwie funkt das noch nicht :(
  8. Was genau funktioniert denn nicht? Die endgültige Ausgabe erfolgt dann mittels

    imagejpeg($image);
    bzw. beim Abspeichern
    imagejpeg($image,$dateiname,$qualitaet);


    Das folgt bei mir später im Quelltext. Daher habe ich vergessen, das zu kopieren.
  9. Autor dieses Themas

    chst

    chst hat kostenlosen Webspace.

    Ha, genau das war es!

    Hatte es so verstanden, dass dieser Schritt schon im imagecopymerge drinnen ist!

    Vielenvielen Dank für deine rasche Hilfe, perfekt!!
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!