Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bild ohne Verzerrung auf 150x180px verkleinern

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

  • [Erledigt] Bild ohne Verzerrung auf 150x180px verkleinern

    Hallo,

    ich möchte viele (jpg-)Bilder von Mitarbeitern auf die gleiche Größe (150px breit und 180px hoch) bringen.

    Das ist ja im Prinzip nicht schwer. Nur, wenn ich ein Bild mit 1000px Breite und mit 600px Höhe habe, wird es ja (zumindest mit imagecopyresized()) total verzerrt.

    Ich möchte also erst die Bilder so klein wie möglich machen (mindestens 150x180) und dann links und rechts oder oben und unten gleich viele px abschneiden.

    Jetzt stellt sich die Frage: Wie?
    Ich denke ja mal, dass ich dafür 2 Schritte machen muss (1. verkleinern, 2. Zuschneiden)

    Ich habe in einem Forum einen Thread gefunden, in dem jemand ein ähnliches Problem hat, allerdings passt der gepostete Lösungsvorschlag nicht wirklich dazu.
    bild verkleinern und ausschneiden - Flashforum

    Danke im Voraus für Lösungen/Hilfestellungen.

    LG
    Päisi


  • #2
    Die Frage ist Unsinn. Mann kann nicht pauschal Querformate in Hochformate wandeln. Letztlich ist doch das Motiv entscheidend
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Naja, hast du dir schon selbst Gedanken zu deinem Problem gemacht?

      Wichtig ist zunächst mal, dass du das Größenverhältnis des Bildes beibehälst und dann auf 150x(>180) oder (>150)x180 verkleinerst (je nachdem, in welchem Seitenverhältnis das Bild vorliegt). Das was an Breite oder Höhe noch übrig ist, kannst du dann abschneiden.

      @nikosch

      Klar, dann fehlt halt ab und zu der Kopf.

      Kommentar


      • #4
        mindestens 150x180
        Dann überprüf doch, ob das Bild Quer- oder Hochformat hat.
        Dann kannst danach entscheiden, ob Du auf 150 Breite oder 180 Höhe proportional skalierst.

        Wenns allerdings exakt 150x180 werden soll, halte ich das auch für Schwachsinn...



        EDIT Asipak gaaaaaaaaaaaaanz knapp verpaßt.
        Competence-Center -> Enjoy the Informatrix
        Blog mit Tutorials für Einsteiger

        Kommentar


        • #5
          Wieso haltet ihr das für schwachsinn?

          @nikosch: das motiv ist nicht entscheidend, es soll eine art thumbnail sein, es ist egal, ob da der kopf ganz drauf ist oder nicht.

          Ich habe mir jetzt folgendes ausgedacht:

          PHP-Code:
          list($breite$hoehe)  = getimagesize($_GET['image']);
          $prozentsatzhoehe $hoehe/200;
          $prozentsatzbreite $breite/150;
          if (
          $breite/$prozentsatzhoehe >= "150")
          {
          $width $breite/$prozentsatzhoehe;
          $breiteabschneiden = ($width-150)/2;
          }
          elseif (
          $hoehe/$prozentsatzbreite >= "200")
          {
          $height $hoehe/$prozentsatzbreite;
          $hoeheabschneiden = ($height-200)/2;
          }
          header('Content-type: image/jpeg');
          $src   imagecreatefromjpeg($_GET['image']);
          $dest  imagecreatetruecolor(150200);
          imagecopyresized($dest$src$breiteabschneiden$hoeheabschneiden00150200$breite$hoehe);
          imagejpeg($dest);
          imagedestroy($dest);
          imagedestroy($src);
          exit(); 
          Nur bekomme ich zum Teil immernoch einen kleinen schwarzen Rand.

          Kann mir jemand sagen, wo der Fehler ist? Hab mich jetzt ne Stunde dumm und dämlich gesucht.

          Danke

          Kommentar


          • #6
            Dann skalier einheitlich die Höhe und zeig den Rest nicht an. So mache ich das
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Ja, das versuche ich ja mit dem script (siehe oben) zu bezwecken.

              Würdest du vielleicht mal drübersehen? Immerhin habe ich das selbst gecodet, wie ihr Profis es ja gerne seht, aber jetzt stehe ich an nem Punkt, wo es ohne Hilfe nicht weitergeht.

              Kommentar


              • #8
                Kannst du deinen Code dann bitte zumindest vernünftig einrücken und mal ein paar Leerzeilen zur Strukturierung einbauen? So macht es echt keinen Spaß, sich das anzusehen.

                Kommentar


                • #9
                  So ok?
                  PHP-Code:
                  <?php
                    
                  list($breite$hoehe) = getimagesize($_GET['image']);

                      
                  $prozentsatzhoehe $hoehe/200;
                      
                  $prozentsatzbreite $breite/150;

                    if (
                  $breite/$prozentsatzhoehe >= "150")
                    {
                      
                  $width $breite/$prozentsatzhoehe;
                      
                  $breiteabschneiden = ($width-150)/2;
                    }
                    elseif (
                  $hoehe/$prozentsatzbreite >= "200")
                    {
                      
                  $height $hoehe/$prozentsatzbreite;
                      
                  $hoeheabschneiden = ($height-200)/2;
                    }

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

                      
                  $src imagecreatefromjpeg($_GET['image']);
                      
                  $dest imagecreatetruecolor(150200);

                      
                  imagecopyresized($dest$src$breiteabschneiden$hoeheabschneiden00150200$breite$hoehe);
                      
                  imagejpeg($dest);
                      
                  imagedestroy($dest);
                      
                  imagedestroy($src);
                    exit();
                  ?>

                  Kommentar


                  • #10
                    Ich würde sagen $breiteabschneiden und $hoeheabschneiden sind nach nikoschs Methode überflüssig. In die Funktion imagecopyresized gehört stattdessen an diesen beiden Stellen eine 0.

                    [edit] Wobei, ich überleg' lieber noch mal

                    Kommentar


                    • #11
                      Naja, $breiteabschneiden und $hoeheabschneiden beinhaltet ja die Werte, die am linken bzw. oberen Rand abgeschnitten werden soll, um die gleichen Werte an Pixeln am rechten bzw. unteren Rand des Bildes enthalten zu haben. Also wenn das Bild die Breite von 150px und die Höhe von 210px hat, sollen oben 5px abgeschnitten werden, um die unteren 5px mit auf dem Bild zu haben (sprich: die Mitte soll angezeigt werden).

                      Kommentar


                      • #12
                        Habe es jetzt mal selbst ausprobiert und mit einem Bild getestet! Hoffentlich haben sich nicht noch irgendwo Fehler eingeschlichen

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

                        $image $_GET['image']; // Pfad zur Grafik

                        list($width$height) = getimagesize($image);

                        $new_width 100;
                        $new_height 170;

                        if (
                        $width $height $new_width $new_height) {
                          
                        $height $new_height * ($width $new_width);
                        }
                        else if (
                        $width $height $new_width $new_height) {
                          
                        $width $new_width * ($height $new_height);
                        }

                        $src imagecreatefromjpeg($image);
                        $dest imagecreatetruecolor($new_width$new_height);

                        imagecopyresized($dest$src0000$new_width$new_height$width$height);

                        imagejpeg($dest);

                        imagedestroy($dest);
                        imagedestroy($src); 
                        Gruß

                        Kommentar


                        • #13
                          Danke erstmal.

                          Ich habe das gerade mal "an einer Kollegin" ausprobiert. Da ihr Bild in Richtung Quadrat geht, sind jetzt nur ca. 2/3 Ihres Kopfes zu sehen, also das Bild ist nicht zentriert. Wie bekomme ich es noch mittig? Ich hatte ja in meinem Script das mit $prozentsatzhoehe und $prozentsatzbreite versucht zu machen. War der Ansatz davon denn richtig?

                          Kommentar


                          • #14
                            Dann musst du die Parameter 5 und 6 sowie 9 und 10 noch etwas anpassen, damit das Bild nicht ausgehend von der linken oberen Ecke rüberkopiert wird.

                            [edit] Wobei, ich muss mich da wohl noch mal korrigieren. Die Parameter 9 und 10 sagen ja nur etwas über die Breite und Höhe des Ausschnitts aus und nicht etwa über die Position der rechten unteren Ecke. Daher sollten diese wohl fix bleiben.

                            Kommentar


                            • #15
                              Womit mein Ansatz doch der Richtige war, oder nicht?

                              Kommentar

                              Lädt...
                              X