Ankündigung

Einklappen
Keine Ankündigung bisher.

imagecrop() Ausschnitt verschoben

Einklappen

Neue Werbung 2019

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

  • imagecrop() Ausschnitt verschoben

    Hallo PHP Community,
    seit einiger Zeit arbeite ich an einer App auf der Basis von Phonegap. In dieser möchte ich es den Benutzern ermöglichen, die Darstellung Ihres Profilbildes selbst festzulegen.
    Dafür verwende ich das JavaScript Plugin Cropper, welches die Koordinaten eines Bildausschnitts erfasst und anschließend an mein PHP Script übergibt.
    Leider weicht der Bildausschnitt nach erfolgreichem Upload, immer von dem Gewählten ab. Habt Ihr eine mögliche Lösung? Ich bin mit meinem Latein am ende

    Vielen Dank im Voraus.
    Beste Grüße
    Lukas

    JavaScript zum erfassen des auszuschneidenden Bereichs;

    PHP-Code:
    function uploadPhoto(imageURI) {

    $(
    '#user_photo').attr("src"imageURI);
    $(
    '.user_photo_crop').css("display""block");

    $(
    '#user_photo').cropper({
    aspectRatio1,
    dragMode'move',
    cropBoxResizablefalse,
    crop: function(e) {
    crop_x Math.round(e.x);
    crop_y Math.round(e.y);
    crop_width Math.round(e.width);
    crop_height Math.round(e.height);
    }
    }); 

    PHP Script zum Verarbeiten der Bilder:

    PHP-Code:
    $crop_x $_POST["crop_x"];
    $crop_y $_POST["crop_y"];
    $crop_width $_POST["crop_width"];
    $crop_height $_POST["crop_height"];

    if (
    $_FILES) {

    $user_photo imagecreatefromjpeg($_FILES["file"]["tmp_name"]);
    $crop_options = array('x' => $crop_x 'y' => $crop_y'width' => $crop_width'height'=> $crop_height);
    $user_photo_crop imagecrop($user_photo$crop_options);

    imagejpeg($user_photo_crop$dirname "/" $user_photo_name100);

    imagedestroy($user_photo);



  • #2
    Bitte PHP-Tags für PHP-Code verwenden, danke!
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Danke für den Hinweis.

      Kommentar


      • #4
        Wie sieht das konkret aus? Mit der Fehlerbeschreibung "Bildausschnitt weicht vom gewählten ab" kann keiner was anfangen.
        Um dir zu helfen zu können, sollte dein Problem von einem Helfer hier reproduzierbar sein.
        Hilfreich wäre es, wenn du ein Testbild zur Verfügung stellst, so wie es im PHP Skript angeliefert wird. Und die Parameter x, y etc., welche noch per POST kommen.

        Kommentar


        • #5
          uhm ... was mir zuerst auffällt ... dein aspect-ratio sieht "merkwürdig aus" .. 1/1 ist doch nur für exakt quadratische Bilder richtig ...

          warum berechnest du nicht das exakte aspect-ratio ?

          welche PHP-Version rennt bei dir ? ..

          mal ins PHP-Manual gucken ... http://php.net/manual/de/function.imagecrop.php
          "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

          Kommentar


          • #6
            Guten Morgen,
            vielen dank für euer Interesse.
            Die aspect-ratio ist so in ordnung, ich möchte Bilder mit identischen Seitenlängen erhalten.
            Bei mir rennt PHP Version 7.0.9
            Selbstverständlich ist PHP.net meine erste Anlaufstelle, leider hat es mich nicht weitergebracht.
            Wie ist das mit der exakten aspect-ratio gemeint?

            Kommentar


            • #7
              offenbar TAUSCHST du irgendwo die Parameter .. dein Ausschnitt ist ja nicht VERSCHOBEN, sondern GEDREHT ...

              oder machst du mit dem Bild noch irgendwas anderes ?

              das Manual, das ich verlinkt habe, verweist auf eine "Ersatzfunktion" .. hast du dir die mal angeschaut ?
              "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

              Kommentar


              • #8
                nein ich tausche die Parameter nicht und drehen tue ich sie auch nicht. Die Ersatzfunktion habe ich ebenfalls ausprobiert, leider das selbe Ergebnis.
                Möglicherweise liegt es an dem JavaScript Plugin.

                Kommentar


                • #9
                  Um das zu klären, schau dir doch mal an was da bei PHP reinkommt (Das Bild welches hochgeladen wird + $_POST).

                  Kommentar


                  • #10
                    Die ankommenden Parameter sind identisch zu den verarbeiteten. Ich werde das ganze mit einem anderen Plugin probieren. Ich halte euch auf dem Laufenden.

                    Kommentar


                    • #11
                      Die erste Frage war ja, ob das Bild was da reinkommt ok ist. Dafür sollte für Debuggingzwecke ein
                      PHP-Code:
                      echo '<img src="'$_FILES["file"]["tmp_name"] . '">'
                      ausreichen.

                      Kommentar


                      • #12
                        Habe eine Lösung gefunden. Die Funktion imagecreatefromjpeg() dreht Bilder automatisch, wenn sie breiter sind als hoch. Da dies bei Smartphone-Fotos, insbesondere bei Aufnahmen der Frontkamera der Fall ist, werden diese gedreht. Um dem entgegenzuwirken, lese ich die EXIF-Daten des Bildes aus und drehe es entsprechend.

                        PHP-Code:
                        if ($_FILES) {
                        $user_photo imagecreatefromjpeg($_FILES["file"]["tmp_name"]);
                        @
                        $exif exif_read_data($_FILES['file']['tmp_name']);

                        if(!empty(
                        $exif['Orientation'])) {
                        switch(
                        $exif['Orientation']) {
                        case 
                        8:
                        $user_photo imagerotate($user_photo,90,0);
                        break;
                        case 
                        3:
                        $user_photo imagerotate($user_photo,180,0);
                        break;
                        case 
                        6:
                        $user_photo imagerotate($user_photo,-90,0);
                        break;
                        }

                        Kommentar


                        • #13
                          ROTFL ...das lese ich zum ersten Mal ...

                          das mit dem Drehen von Bildern kenne ich eigentlich nur von Smartphone -Bildern, die "aus versehen" mit auf dem Kopf stehenden Handy gemacht werden - das Handy dreht die Bilder automatisch, wenn ich das Handy drehe - aber beim Übertragen auf den Rechner fehlt diese Information - und dann landen die Bilder auf dem Kopf stehend .. aufgrund der Exif-Daten ...

                          "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                          Kommentar


                          • #14
                            Zitat von LukasBlu Beitrag anzeigen
                            Die Funktion imagecreatefromjpeg() dreht Bilder automatisch, wenn sie breiter sind als hoch.
                            Unsinn. imagecreatefromjpeg() dreht kein Bild. Vielmehr ist es so, das es die Exif-Informationen ignoriert. Siehe Kommentare zu imagecreatefromjpeg().
                            Dort ist auch ein Vorschlag für eine Funktion imagecreatefromjpegexif() zu finden.

                            Hast du mal mein Vorschlag #11 probiert? Wie wird da das Bild gezeigt?

                            Kommentar

                            Lädt...
                            X