Bildgröße ändern / quadratische Thumbnails

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

  • Bildgröße ändern / quadratische Thumbnails

    Hallo!

    Vorneweg: ich bin absoluter PHP-Anfänger.

    Ich hab folgendes Problem. Für eine Fotogalerie möchte ich ein php-script erstellen, dass mir von vorhanden Bildern ein Thumbnail erstellt. Nichts besonderes bis hierher. Allerdings möchte ich, dass die Thumbnails quadratisch sind (w=h), auch wenn das Originalbild eine Rechteckige Abmessung (w <> h) hat.

    Bisher hatte ich folgenden Code:

    $size = GetImageSize ($dir.$file);
    $bigpic = @imagecreatefromjpeg ($dir.$file);
    $w=$size[0];
    $h=$size[1];
    if ($w>=$h) { $x=$w/$w*$stst; $y=$h/$w*$stst; }
    if ($h>=$w) { $x=$w/$h*$stst; $y=$h/$h*$stst; }
    $smallpic = imageCreateTrueColor($x,$y);
    if (!$smallpic){
    $smallpic = imageCreate($x,$y);
    ImageCopyResized ($smallpic, $bigpic, 0, 0, 0, 0, $x, $y, $w,$h); }
    else{
    imagecopyresampled($smallpic,$bigpic,0,0,0,0,$x,$y,$w,$h);
    }
    ImageJPEG($smallpic,$dir."thumb/tn_".$file);
    ImageDestroy($smallpic);
    ImageDestroy($bigpic);

    Dort habe ich dann die Größenprüfung rausgeworfen und

    $x=stst;
    4y=stst;

    eingesetzt. $stst ist die Größenvorgabe für die Thumbnails. Das funktioniert auch soweit, nur sind die quadratischen Thumbnails natürlich gequetscht bzw. auseinandergezerrt.

    Wie kann ich es realisieren, dass die Ausgangsgrafik ($bigpic) vor dem ImageCopyResize erst noch auf ein quadratisches Maß BESCHNITTEN wird?
    Es würde genügen, wenn ein Bild im Querformat links und rechts gleichmäßig auf width=hight beschnitten wird. Und Hochformat entsprechend.

    Viele Grüße
    Flo

  • #2
    Re: Bildgröße ändern / quadratische Thumbnails

    Original geschrieben von floho0711
    Wie kann ich es realisieren, dass die Ausgangsgrafik ($bigpic) vor dem ImageCopyResize erst noch auf ein quadratisches Maß BESCHNITTEN wird?
    Es würde genügen, wenn ein Bild im Querformat links und rechts gleichmäßig auf width=hight beschnitten wird. Und Hochformat entsprechend.
    bild so resizen, dass nur die kürzere kante (breite oder höhe) dem gewünschten maß entspricht, und die andere maßstabsgerecht bleibt.

    anschließend aus diesem maßstabsgerecht verkleinerten bild dann mit imagecopy o.ä. nur den gewünschten teilbereich rausschneiden (koordinaten dafür vorher berechnen.)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      lass die grössenprüfung drin und benutze die vorgabemaße für ein quadratisches bild NUR für imagecreate() & imagecreatetruecolor(). fertig.
      Kissolino.com

      Kommentar


      • #4
        Hi!

        Danke für die Antworten. Klappt schon ganz gut. Nur wird jetzt immer der vorder Bildteil kopiert. Das Thumb ist zwar quadratisch und nicht verzerrt, nur eben nicht aus der Bildmitte herausgeschnitten.

        Habe schon einiges probiert. Kann es sein, dass man mit ImageCopyResized() den startpunkt nicht festlegen kann?? Eigentlich doch schon, oder???

        Ich hab folgendes "Konstrukt" gebildet:

        if ($w>=$h) { $x=$w/$h*$stst; $y=$h/$h*$stst; $sx=$w-$h/2; $sy=0; $sw=$h; $sh=$h; }
        if ($h>=$w) { $x=$w/$w*$stst; $y=$h/$w*$stst; $sy=$h-$w/2; $sx=0; $sw=$w; $sh=$w; }
        $smallpic = imageCreateTrueColor($stst,$stst);
        if (!$smallpic){
        $smallpic = imageCreate($stst,$stst);

        ImageCopyResized ($smallpic, $bigpic, 0, 0, $sx, $sy, $stst, $stst, $sw, $sh); }

        Leider klappt das irgendwie nicht. das Ergebnis ist das selbe wie oben beschrieben. muss ich ein "zwsichenimage" erstellen und dann mit ImageCopy() arbeiten? Eigentlich müsste man sich den schritt doch sparen können... oder??

        Gruß FLo

        Kommentar


        • #5
          Original geschrieben von floho0711
          Kann es sein, dass man mit ImageCopyResized() den startpunkt nicht festlegen kann?? Eigentlich doch schon, oder???
          klar geht das. du kannst auch negative werte einsetzen.

          prüfe mal deine variablenwerte. ich geh mal davon aus, dass du keine ganzzahlen erzeugst. ceil() & floor() sind hier deine freunde. es gibt ja keine 1.3333 pixel
          Kissolino.com

          Kommentar

          Lädt...
          X