Thumbnails mit innerem Rahmen erzeugen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Thumbnails mit innerem Rahmen erzeugen

    Hi

    Ich möchte gerne Bilder propertional verkleinern - funktioniert auch wunderbar. Nun hätte ich aber gerne ALLE Thumbs in einer festen Größe - sagen wir 100*60, und darin dann die propertional verkleinerten Originale (sprich einen Rahmen im Thumb drumherum).

    Ich finde nirgends einen entsprechenden Schnippsel und bin selbst irgendwie zu doof dafür *g*

    Zur Zeit nutze ich dieses kleine Programm:
    PHP-Code:
    <?

    header('Content-type: image/jpeg');
    //$myimage = resizeImage('filename', 'newwidthmax', 'newheightmax');


    function resizeImage($filename, $newwidth, $newheight){
       list($width, $height) = getimagesize($filename);
       if($width > $height && $newheight < $height){
           $newwidth = $width / ($height / $newheight);  
       } else if ($width < $height && $newwidth < $width) {
           $newwidth = $width / ($height / $newheight);    
       } else {
           $newwidth = $width / ($height / $newheight);  
       }
       $thumb = imagecreatetruecolor($newwidth, $newheight);
       $source = imagecreatefromjpeg($filename);
       imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
       return imagejpeg($thumb);
    }
    $image = $_GET['image'];
    $x = $_GET['x'];
    $y = $_GET['y'];

    $myimage = resizeImage("$image", "$x", "$y");
    print $myimage;
    ?>
    Damit erzeuge ich jedenfalls schon mal halbwegs passende Thumbs, aber die Breite variiert halt immer..

    Danke für Eure Hilfe

  • #2
    1. imagecreatetruecolor() sollte dann erstmal die feste größe übergeben bekommen (100x60 oder so).

    2. $newwidth und $newheight sollten je nach dem, welche seite größer ist, etwas kleiners als das neue bild werden (z.b. max. 90x50).

    3. mit imagefill() kannst du das neue bild schwarz füllen, o.ä.

    4. imagecopyresized() erwartet, soweit ich weiß, parameter, die besagen, an welcher stelle (koordinatenweise) das neue bild in das $thumb gesetzt wird. wird nicht so schwer sein, das bild zentriert zu platzieren.

    Kommentar


    • #3
      Hallo Pandur2000

      Ich hoffe ich habe dich richtig verstanden. Bildverkleinerung ist eigentlich sehr leicht. Nur wenn man neben bei auch noch etwas am Bild verändern möchte, braucht man das Bildformat (den MIME-Type).

      Du solltest daher vorab prüfen was für ein Bild es ist. PNG, JPEG, oder GIF. Mit animierten oder Transparenten Bilder wäre der Aufwandt wiel größer. Transparenzen verarbeitet mein Schript nicht, aber du kannst es selbst erweitern.

      Meine Referenzen habe ich von PHP.net unter dem Suchbegriff GD Lib über Google genommen. Dort bekommst du semtliche GD Funktionen, die als Grundlage sehr wichtig sein können.

      Nun zum Script:

      Hier legst du erst die Bildformatgröße fest, zum Beispiel 3 verschiedene Größen aus einem Bild
      PHP-Code:
      $max_image_w 400;
      $max_image_h 300;

      $middle_image_w 200;
      $middle_image_h 150;

      $mini_image_w 67;
      $mini_image_h 50
      Als nächstes gehst her und prüfst das Bild nach seinen MIME-Type
      Ich gehe davon aus, das Bild nennt sich datei.* und liegt im Verzeichnis key/upload/

      Ich suche einfach nach einem Bild und type, wobei das etwas auch schwachisinnig ist, bei dir würde ein GET vollkommen ausreichen, für meinen Bedarf ist das wichtig! du kannst den Mime-type auch aus getimagesize() bestimmen. dort holst du auch Bildbreite und Höhe her.

      PHP-Code:
      if (file_exists("key/upload/datei.gif")) {
          
      $altimg_type "gif";
          
      $altimage "key/upload/datei.gif";
          
      $altimage_daten getimagesize($altimage);
          
      $altimg_b $altimage_daten['0'];
          
      $altimg_h $altimage_daten['1'];
          
      $altimage imagecreatefromgif($altimage);
      } else if (
      file_exists("key/upload/datei.jpg")) {
          
      $altimg_type "jpg";
          
      $altimage "key/upload/datei.jpg";
          
      $altimage_daten getimagesize($altimage);
          
      $altimg_b $altimage_daten['0'];
          
      $altimg_h $altimage_daten['1'];
          
      $altimage imagecreatefromjpeg($altimage);
      } else if (
      file_exists("key/upload/datei.png")) {
          
      $altimg_type "png";
          
      $altimage "key/upload/datei.png";
          
      $altimage_daten getimagesize($altimage);
          
      $altimg_b $altimage_daten['0'];
          
      $altimg_h $altimage_daten['1'];
          
      $altimage imagecreatefrompng($altimage);
      } else {
          die(
      'Biltdyp ist nicht Gif / Jpg / oder Png, oder Bild ist nicht vorhanden');

      Nun erstellst deine neuen Bilder, mit der Größe deiner Ausgansdaten

      PHP-Code:
      $bild imagecreate($mini_image_w,$mini_image_h);
      $bild2 imagecreate($middle_image_w,$middle_image_h);
      $bild3 imagecreate($max_image_w,$max_image_h);
      $bild4 imagecreate($altimg_h,$altimg_h); 
      Jetzt verziehst du das originale Bild, in den Ausgangszustand.
      PHP-Code:
      imagecopyresampled($bild$altimage0000$mini_image_w$mini_image_h$altimg_b$altimg_h);
      imagecopyresampled($bild2$altimage0000$middle_image_w$middle_image_h$altimg_b$altimg_h);
      imagecopyresampled($bild3$altimage0000$max_image_w$max_image_h$altimg_b$altimg_h);
      imagecopyresampled($bild4$altimage0000$altimg_b$altimg_b$altimg_b$altimg_h); 
      .... Hie kannst du nun einen Rahmen ziehen ....


      Und dann speicherst du die Bilder einfach wieder ab.
      PHP-Code:
      imagegif($bild,"key/upload/".$zeit_."min.gif");
      imagegif($bild2,"key/upload/".$zeit_."middle.gif");
      imagegif($bild3,"key/upload/".$zeit."_max.gif");
      imagegif($bild4,"key/upload/".$zeit.".gif"); 
      Ich habe in meinem Script gleich 4 Bilder minimiert. Du kannst auch einen Rhamen ziehen, in dem du erst eine Farbe definierst:

      $f_schwarz= imagecolorallocate($bild, 0, 0, 0); //RGB

      und Linien ziehst du mit

      imageline($bild,0,0,0,120,$f_schwarz); //Pixel Angaben + Farbe

      Wobei penezillin schon recht hat, wenn du das Bild um einen Pixel kleiner ziehst, kannst dir die 4 Linien sparen. Achtung aber dabei. Prüfe erst ob die Minimierung auch richtig plaziert ist, und das ist nicht ganz so einfach.
      Zuletzt geändert von LGC; 31.08.2005, 18:09.

      Kommentar


      • #4
        Wenn ich das nun Deiner Beschreibung folgend mache, sind die Bilder verzerrt.. :|

        http://www.brazil-flirt.com/flirt/th...jpg&x=90&y=100

        Ich möchte ja das original so lange verkleinern, propertional, bis es in den 90*100 kasten passt...

        Derzeitiger Code:

        PHP-Code:

        header
        ('Content-type: image/jpeg');

        //$myimage = resizeImage('filename', 'newwidthmax', 'newheightmax');

        $altimage $_GET['image'];
        $mini_image_w $_GET['x'];
        $mini_image_h $_GET['y'];



        $size=getimagesize($image); 

         if(
        $size[2]==1) { 
          
        // GIF 

            
        $altimg_type "gif";
            
        $altimage_daten getimagesize($altimage);
            
        $altimg_b $altimage_daten['0'];
            
        $altimg_h $altimage_daten['1'];
            
        $altimage imagecreatefromgif($altimage);

        }
          if(
        $size[2]==2) { 
          
        // JPG 

            
        $altimg_type "jpg";
            
        $altimage_daten getimagesize($altimage);
            
        $altimg_b $altimage_daten['0'];
            
        $altimg_h $altimage_daten['1'];
            
        $altimage imagecreatefromjpeg($altimage);

        }
          if(
        $size[2]==3) { 
          
        // PNG 

            
        $altimg_type "png";
            
        $altimage_daten getimagesize($altimage);
            
        $altimg_b $altimage_daten['0'];
            
        $altimg_h $altimage_daten['1'];
            
        $altimage imagecreatefrompng($altimage);
        }



        $bild imagecreatetruecolor($mini_image_w,$mini_image_h);
        ImageCopyResized($bild$altimage0000$mini_image_w$mini_image_h$altimg_b$altimg_h);
        imagejpeg($bild); 
        Ja, ich weiß, ich könnte das noch vereinfachen. Aber erst FUNKTIONIEREN, dann OPTIMIEREN. :P
        Zuletzt geändert von Pandur2000; 01.09.2005, 11:29.

        Kommentar


        • #5
          Heho,

          ich habs immer noch nicht geschafft.. Ich hab ja mal versucht, das Bild zuerst mit Max Width/Height zu verkleinern, wie bisher halt, klappt ja. Da ich ne statische Tabelle habe sind die "Größen" der Felder natürlich auch alle gleich, wie gewünscht, aaaber ich möchte halt trotzdem lieber ein immer gleich großes Thumb haben :|

          Nun habe ich mal geschaut, wie und ob ich das fertige Thumb erneut in ein neues Bild kopieren kann - dann hätte ich ja meinen Rahmen - aber es wird trotz allen @s immer nur das erste erstellte Thumb von PHP ausgegeben.. :| Hilfe?! :|

          Kommentar

          Lädt...
          X