Bild skalieren

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

  • Bild skalieren

    Hallo,

    ich bin ein PHP-Anfänger und habe folgende Frage:

    Ich habe verschiedene Bilder, alle haben eine Unterschiedliche Größe, manche sind quadratisch, manche Rechteckig, etc. Jedenfalls will ich alle Bilder auf eine größe skalieren.

    Das geht bis jetz so:

    $im1 = imagecreatetruecolor(152, 114);
    $im2 = ImageCreateFromJPEG ($BildUrl);

    imagecopyresampled ($im1, $im2, 0, 0, 0, 0, 152, 114, imagesx($im2), imagesy($im2));
    imagejpeg ($im1, "/home/htdocs/web15/html/pics/".&Pnr.".jpg");
    imageDestroy($im1);
    imageDestroy($im2);

    Alle Bilder sollen also am Ende 152 X 114 sein. Wenn ein Bild aber jetzt vorher z.b. 100 X 300 war, ist es ja jetzt breitgezogen. WIe kann man das verhindern (z.b. das rechts und links weiße Streifen sind, und das Bild also noch "normal" aussieht, aber trotzdem am Ende ein Bild ist mit 152 x 114 Pixeln?

    Danke vielmals im Vorraus!

    MfG
    Andy

  • #2
    Re: Bild skalieren

    Original geschrieben von andyk80
    WIe kann man das verhindern
    In dem man vorher die Maße, die ohne Verzerrung möglich sind, ausrechnet (Stichwort Dreisatz) - und dann bei imagecopyresampled einen entsprechenden Versatz angibt.


    Wer selber nachgedacht hätte, hätte da aber auch selber drauf kommen können.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hallo,

      ich weiß zwar was du meinst, aber ich habe keine Ahnung, wie das in PHP aussihet, da ich die ganzen Berechnungssachen etc. noch nicht kann.

      MfG
      Andy

      Kommentar


      • #4
        Also wenn du ein Bild resizen willst dann würde ich die Größe eines Querformates nicht einem Hochformat verpassen.

        Wenn dann solltest du dich auf eine globale Größe (B/H) für ein Hochformat und ein eine für ein Querformat festlegen.

        Das ist meine Funktion dafür:
        PHP-Code:
        <?
        function thumb($file, $save, $width, $height, $prop = true) 
        {
            // Requires GD-Lib > 2.0
            // Ist $prop=TRUE, so werden die Proportionen des Bildes
            // auch im Thumbnail eingehalten

            @unlink($save);
            fopen("./".$save, "w");
            $infos = getimagesize($file);
            if($prop) 
            {
                // Proportionen erhalten
                $iWidth = $infos[0];
                $iHeight = $infos[1];
                $iRatioW = $width / $iWidth;
                $iRatioH = $height / $iHeight;
                if ($iRatioW < $iRatioH)
                {
                    $iNewW = $iWidth * $iRatioW;
                    $iNewH = $iHeight * $iRatioW;
                } 
                else 
                {
                    $iNewW = $iWidth * $iRatioH;
                    $iNewH = $iHeight * $iRatioH;
                } // end if
            } 
            else 
            {
                // Strecken und Stauchen auf Größe
                $iNewW = $width;
                $iNewH = $height;
            }

            if($infos[2] == 2) 
            {
                // Bild ist vom Typ jpg
                $imgA = imagecreatefromjpeg($file);
                $imgB = imagecreatetruecolor($iNewW,$iNewH);
                imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW,
                                                     $iNewH, $infos[0], $infos[1]);
                imagejpeg($imgB, $save);
                return true;
            } 
            elseif($infos[2] == 1) 
            {
                // Bild ist vom Typ gif
                $imgA = imagecreatefromgif($file);
                $imgB = imagecreatetruecolor($iNewW, $iNewH);
                imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW,
                                                     $iNewH, $infos[0], $infos[1]);
                imagegif($imgB, $save);
                return true;
            } 
            else 
                return false;


        $file = "./ch4iny_wall.jpg";
        thumb($file, "test_thumb.jpg", 2, 200, true);

        ?>
        greatz reallife

        Kommentar


        • #5
          Hi,

          da ist aber das neue Bild immer links oben wenn die Göße beibehalten wird, oder? Wie kann man das jetzt noch zentirieren im neuen Bild?

          MfG
          Andy

          Kommentar


          • #6
            Wieso sollte das Bild denn immer links oben sein?
            Es wird doch verkleinert!

            Kommentar


            • #7
              Hallo,

              ups sorry. Ja, stimmt. ABer das ist nicht das was ich gesucht habe. Ich brauche am Ende ein Bild, das exakt so groß ist, wie ich es brauche (152 X 114), dabei sollen die Bildproportionen beibehalten werden. Wenn ein Bild aber nicht in diesem 4:3 Format ist, sollen weiße Streifen an den Rändern das Bild ausfüllen, damit es auf die gebrauchte Größe 152 x 114 kommt, damit es zentriert ist.

              MfG
              Andy

              Kommentar


              • #8
                Dann verkleinerst du eben das Bild damit es in das gegebene Rechteck passt und ermittelst aus den resultierenden Bildmaßen dann die horizontal und vertikalposition des Bildes in dem rechteck und färbst den rest weiß.

                (allerdings verstehe ich den Vorteil nicht... du könntest das ja auch mit html/css das bild zentrieren)

                Kommentar

                Lädt...
                X