• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

bilder per php bearbeiten

mustang

Mitglied
hallo leute,

ich möchte auf meiner homepage bilder mit php bearbeiten.
wenn ich ein bild anzeigen will, möchte ich
HTML:
<img src="www.meinedomain.de/bilderanzeige.php?width=30&url=/bilder/katze.jpg" ... >
als code schreiben.
die datei bilderanzeige.php soll dann je nach parameter das bild bearbeiten und ausgeben. (unter anderem einen schatten im hintergrund einfügen, etc.)
wie kann ich das machen?
habe in anderen foren nur den link zu den image-funktionen gefunden, aber leider nie ein sinnvolles beispiel, wo ich das nachvollziehen kann.

letztendlich soll also ein thumbnail entstehen, dass natl kleiner ist, als das originalbild ist und einen quadratischen ausschnitt des originalbildes anzeigt. außerdem soll noch ein schatten eingefügt werden (zum beispiel aus einer anderen .jpg datei).
 
also habe mir jetzt eine funktion gebastelt. die sieht derzeit so aus:

PHP:
 // Aufruf der Funktion: 
erzeugeBildausschnitt("back00.jpg"); 
 
function erzeugeBildausschnitt($bildQuelle){
    
    $size = getimagesize($bildQuelle);
    
    // welche Breite + Hoehe soll der Ausschnitt haben
    if ($size[0] > $size[1]) {
        $Ausschnitt_Breite = $size[1];
        $Ausschnitt_Hoehe = $size[1];
        $Position_x = (($size[0]-$size[1])/2);
        $Position_y = 0;
    }
    
    if ($size[0] < $size[1]) {
        $Ausschnitt_Breite = $size[0];
        $Ausschnitt_Hoehe = $size[0];
        $Position_x = 0;
        $Position_y = (($size[1]-$size[0])/2);
    }
    
    if ($size[0] == $size[1]) {
        $Ausschnitt_Breite = $size[0];
        $Ausschnitt_Hoehe = $size[0];
        $Position_x = 0;
        $Position_y = 0;
    }

    
    $img1 = imagecreatefromjpeg($bildQuelle);//OriginalDatei
    $img2 = imagecreatetruecolor($Ausschnitt_Breite, $Ausschnitt_Hoehe);//Neue Datei mit Auschnitt der Originaldatei
    
    //Was soll geschehen?
    //Aus der Hauptdatei soll ein Auschnitt (x: 15px; y:15 px; Breite: 70px; Höhe: 140px)
    //in die Neue Dateu ($img2) kopiert werden.
    imagecopymerge($img2, $img1, 0, 0, $Position_x, $Position_y, $Ausschnitt_Breite, $Ausschnitt_Hoehe, 100);
    
    //Die neue Datei wird unter einem anderen Namen abgespeichert (und anschließend Speicher gelöscht)
    header("Content-type: image/jpeg");
    imagejpeg($img2);
    imagedestroy($img1);
    imagedestroy($img2);
 
}

jetzt wird auf jeden fall schon mal ein quadratischer bildausschnitt angezeigt, den ich auch haben wollte.
nun möchte ich noch hinzufügen, dass ein schatten eingefügt wird.
also in einer zweiten datei habe ich dann den schatten. zum beispiel so wie im anhang.
in das weiße quadrat soll jetzt mein bild hineinkopiert werden.
(ich würde die schattendatei dann größer machen, damit man auch bilder mit 400*400 mit einem schatten versehen kann)

anschließend soll das entstandene bild noch verkleinert werden. oder vorher... wie auch immer

wie bekomme ich das hin?
 

Anhänge

  • schatten.jpg
    schatten.jpg
    14,3 KB · Aufrufe: 4
Also wenn du mich fragst, würde ich den schatten nicht ins Bild einfügen, sondern in dein CSS, das dir definiert, wie du die Bilder anzeigen willst... einfach ein div, in dem ladest du einen rahmen als Background und positionierst das bild passend dazu...
 
ne das mit nem extra div wollte ich gerade eben nicht... wird zu viel html-code
aber ich habs hinbekommen. *stolzbin*

mein code sieht jetzt so aus:

PHP:
// Aufruf der Funktion: 
erzeugeBildausschnitt("back00.jpg",200); 
 
function erzeugeBildausschnitt($bildQuelle,$s){
    
    $size = getimagesize($bildQuelle);
    
    // welche Breite + Hoehe soll der Ausschnitt haben
    if ($size[0] > $size[1]) {
        $Ausschnitt_Breite = $size[1];
        $Ausschnitt_Hoehe = $size[1];
        $Position_x = (($size[0]-$size[1])/2);
        $Position_y = 0;
    }
    
    if ($size[0] < $size[1]) {
        $Ausschnitt_Breite = $size[0];
        $Ausschnitt_Hoehe = $size[0];
        $Position_x = 0;
        $Position_y = (($size[1]-$size[0])/2);
    }
    
    if ($size[0] == $size[1]) {
        $Ausschnitt_Breite = $size[0];
        $Ausschnitt_Hoehe = $size[0];
        $Position_x = 0;
        $Position_y = 0;
    }

    
    $img1 = imagecreatefromjpeg($bildQuelle);//OriginalDatei
    $img2 = imagecreatetruecolor($Ausschnitt_Breite, $Ausschnitt_Hoehe);//Neue Datei mit Auschnitt der Originaldatei
    
    //Was soll geschehen?
    //Aus der Hauptdatei soll ein Auschnitt (x: 15px; y:15 px; Breite: 70px; Höhe: 140px)
    //in die Neue Dateu ($img2) kopiert werden.
    imagecopymerge($img2, $img1, 0, 0, $Position_x, $Position_y, $Ausschnitt_Breite, $Ausschnitt_Hoehe, 100);
    
    $abstand = (($s/800)*40);
    
    $img3 = imagecreatetruecolor(($s-(2*$abstand)),($s-(2*$abstand)));
    ImageCopyResized($img3, $img2,0,0,0,0, ($s-(2*$abstand)), ($s-(2*$abstand)), $Ausschnitt_Breite, $Ausschnitt_Hoehe); 
    
    $img4 = imagecreatefromjpeg("schatten.jpg");
    $img5 = imagecreatetruecolor($s, $s);
    ImageCopyResized($img5, $img4,0,0,0,0, $s, $s, 800, 800);
    
    imagecopymerge($img5, $img3, $abstand, $abstand, 0, 0, ($s-(2*$abstand)), ($s-(2*$abstand)), 100);
    
    //Die neue Datei wird unter einem anderen Namen abgespeichert (und anschließend Speicher gelöscht)
    header("Content-type: image/jpeg");
    imagejpeg($img5);
    imagedestroy($img1);
    imagedestroy($img2);
    imagedestroy($img3);
    imagedestroy($img4);
    imagedestroy($img5);
 
}

das einzige problem ist, dass die quali echt nicht besonders ist. wie kann ich die denn verbessern?
vielleicht gibts ja irgendwelche alternativen zu den verwendeten funktionen, die eine bessere qualität ausgeben?!
 
Zuletzt bearbeitet:
"Sehr verschwommen?" Ich nehme mal an, dass durch die Größe deines Rahmens dieser auch praktisch im verhältnis stärker komprimiert wird, als wie das kleinere Bild. Deswegen verschwinden die Ecken unter dem Bild.
 
ne das passt schon. also das bild wird auf den schatten kopiert. demnach müssten die ecken ja bleiben.
das verheältnis der komprimierung rechne ich ja auch aus, so dass der abstand von der seite immer stimmt. das haut schon hin. und da ja das bild über dem schatten ist, verstehe ich nicht, warum die ecken weg sind^^
 
Zurück
Oben