lacultu: Bildausschnitt erzeugen - es klappt nicht.Funktion die Richtige?

Hallo.

Ich möchte aus einem Bild im Format 300*400 einen Ausschnitt 216*166 ausschneiden. Per JS lese ich die Koordinaten der oberen linken Ecke (x1,y1) und unteren rechten Ecke (x2,y2) aus.

Leider sehen die Ergebnisse schrecklich aus, egal was ich nehme:
imagecopyresample,
imagecopyresize,
imagecopy

Egal welche davon ich nehme, die Bilder sehen schrecklich aus.

Ich habe überprüft ob die Koordinaten richtig sind. (Mehrfach ausgeben lassen und rekursiv überprüft)
Ich habe überprüft ob ich die Parameter an die richtige Stelle setze. (habe sie zum Test auch mal vertauscht)
Ich habe überprüft ob das SRC-Image fehlerfrei ist.
Ich habe keine Fehler-Meldung.
Ich habe mir die Beschreibungen der Funktionen inkl. der Beispiele in den Kommentaren auf php.net angeguckt _und_ Google benutzt.

Angenommen ich möchte von der oben linken Ecke einen 216 breiten und 166 hohen Ausschnitt.

$x1=0;
$y1=0;
$x2=216;
$y2=166;
$width=226;
$height=166;
$width_orig=300;
$height_orig=400;
$neuesBild=imagecreatetruecolor($width, $height);
$altesBild=imagecreatefromjpeg($image);

Dann funktioniert bei mir weder:

imagecopyresampled($neuesBild, $altesBild,  $x2, $y2, $x1, $y1, $width, $height, $width_orig, $height_orig);

noch:

imagecopyresampled($neuesBild, $altesBild,  $x1, $y1, $x2, $y2, $width, $height, $width_orig, $height_orig);

...
imagejpeg($neuesBild,$path);

(Funktioniert nicht heißt: Technisch läuft alles glatt nur ich bekomme nur einen Teil des Bildes und oben und links nen schwarzen dicken Rand).

Ich verzweifel langsam.
Beste Grüße,
lacultu

  1. Hi,

    Angenommen ich möchte von der oben linken Ecke einen 216 breiten und 166 hohen Ausschnitt.

    Ohne Größenveränderung? Dann verstehe ich nicht, warum du nicht imagecopy nimmst.

    imagecopyresampled($neuesBild, $altesBild,  $x2, $y2, $x1, $y1, $width, $height, $width_orig, $height_orig);

    noch:

    imagecopyresampled($neuesBild, $altesBild,  $x1, $y1, $x2, $y2, $width, $height, $width_orig, $height_orig);

    (Funktioniert nicht heißt: Technisch läuft alles glatt nur ich bekomme nur einen Teil des Bildes und oben und links nen schwarzen dicken Rand).

    Dann passen wohl schlicht und einfach die Parameter, die du angegeben hast, nicht.

    bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

    Für $dst_x und $dst_y etwas anderes als 0 anzugeben, ist ja schon mal Unfug, wenn der Ursprung im neuen Bild links oben sein soll.

    Und src_x und src_y sollten auch 0 sein, wenn du aus dem Originalbild oben links auszuschneiden beginnen willst.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hi.

      Ohne Größenveränderung? Dann verstehe ich nicht, warum du nicht imagecopy nimmst.

      Habe ich auch ausprobiert. Klappt nicht. Weder imagecopy noch imagecopyresampled, noch imagecopyresized

      Dann passen wohl schlicht und einfach die Parameter, die du angegeben hast, nicht.

      Die sind wie im first Post angegeben dort vorhanden. Nur das Egebnis ist halt völlig falsch. =/

      bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

      Ich weiß =/. Ich hab die Doku mittlerweile auswendig im Kopf.

      Für $dst_x und $dst_y etwas anderes als 0 anzugeben, ist ja schon mal Unfug, wenn der Ursprung im neuen Bild links oben sein soll.

      Angenommen ...

      Der Benutzer sucht sich den Bereich selber aus, die Daten kommen aus einer JS-Funktion. Ich habe nur auf den Punkt bringen wollen worauf es ankommt und was mein Problem ist. Ich habe die Koordinaten ja zuückverfolgt und unmittelbar vor der Funktion ausgeben lassen.

      lg, lacultu

      1. Hi,

        Dann passen wohl schlicht und einfach die Parameter, die du angegeben hast, nicht.

        Die sind wie im first Post angegeben dort vorhanden.

        Nur weil du sie hier angegeben hast, müssen sie noch lange nicht richtig sein in Bezug auf das, was du erreichen willst.

        Nur das Egebnis ist halt völlig falsch. =/

        Das spricht ja wohl eindeutig dafür, dass du falsche Parameter angibst.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Das spricht ja wohl eindeutig dafür, dass du falsche Parameter angibst.

          Bzw. mein Englisch zu Wünschen übrig lässt. Problem solved.