Ankündigung

Einklappen
Keine Ankündigung bisher.

Thumbnailcode dreht Fotos

Einklappen

Neue Werbung 2019

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

  • Thumbnailcode dreht Fotos

    Guten Tag,

    ich habe folgenden Code (damals irgendwo aus dem Internet). Bei manchen Fotos dreht er das Foto allerdings. Ich verstehe nicht warum und wann der Code dies macht. Im Anhang die Fotodaten, bei dem das Foto gedreht wird,

    Hat hier jemand eine Idee?

    PHP-Code:
    $inputfile         $upload_dir."/".$neuerName.".jpg";
    $max_width        300;
    $max_height        300;
    $outputfile        $upload_dir."/n/".$neuerName.".jpg";
    $quali            90;

      if (
    substr(strtolower($inputfile), -3) == 'jpeg' || substr(strtolower($inputfile), -3) == 'jpg')
        
    $srcimg imagecreatefromjpeg($inputfile);
      elseif (
    substr(strtolower($inputfile), -3) == 'gif')
        
    $srcimg imagecreatefromgif($inputfile);
      elseif (
    substr(strtolower($inputfile), -3) == 'png')
        
    $srcimg imagecreatefrompng($inputfile);

      if (!
    $srcimg)
        return 
    false;
      else {
        
    $img_width imagesx($srcimg);
        
    $img_height imagesy($srcimg);

        
    /* Skalieren */
        
    if ($img_width $max_width && $img_height $max_height) {
          if (
    $img_height $img_width) {
            
    $img_height ceil($img_height*($max_width/$img_width));
            
    $img_width $max_width;
          }
          else {
            
    $img_width ceil($img_width*($max_height/$img_height));
            
    $img_height $max_height;
          }
        }
        
    $thumbimg imagecreatetruecolor($img_width$img_height);
        
    imagecopyresampled($thumbimg,
        
    $srcimg,0,0,0,0,$img_width,
        
    $img_height,
        
    imagesx ($srcimg),
        
    imagesy($srcimg));

        
    /* Zuschneiden */
        
    $cutted_w 0;
        
    $cutted_h 0;
        if (
    $img_width $max_width)
          
    $cutted_w = ($img_width-$max_width);
        if (
    $img_height $max_height)
          
    $cutted_h = ($img_height-$max_height);

        
    /* Auffüllen */
        
    $fill_w 0;
        
    $fill_h 0;
        if (
    $img_width $max_width)
          
    $fill_w = ($max_width-$img_width);
        if (
    $img_height $max_height)
          
    $fill_h = ($max_height-$img_height);

        
    $dstimg imagecreatetruecolor($max_width$max_height);
        
    imagefill($dstimg00imagecolorallocate($dstimg255255255));

        
    imagecopyresampled($dstimg$thumbimg,
        
    $fill_w/2,$fill_h/2,
        
    $cutted_w/2,$cutted_h/2,
        
    $img_width-$cutted_w$img_height-$cutted_h,
        
    $img_width-$cutted_w$img_height-$cutted_h);

        if (
    substr(strtolower($inputfile), -3) == 'jpeg' || substr(strtolower($inputfile), -3) == 'jpg') {
          if (
    $outputfile !== false)
            
    imagejpeg($dstimg$outputfile$quali);
          else
            
    imagejpeg($dstimg);
        }
        elseif (
    substr(strtolower($inputfile), -3) == 'gif') {
          if (
    $outputfile !== false)
            
    imagegif($dstimg$outputfile);
          else
            
    imagegif($dstimg);
        }
        elseif (
    substr(strtolower($inputfile), -3) == 'png') {
          if (
    $outputfile !== false)
            
    imagepng($dstimg$outputfile);
          else
            
    imagepng($dstimg);
        }
        
    imagedestroy ($srcimg);
        
    imagedestroy ($thumbimg);
        
    imagedestroy ($dstimg);
      } 

  • #2
    Zitat von truemaster Beitrag anzeigen
    Guten Tag,

    ich habe folgenden Code (damals irgendwo aus dem Internet). Bei manchen Fotos dreht er das Foto allerdings. Ich verstehe nicht warum und wann der Code dies macht. Im Anhang die Fotodaten, bei dem das Foto gedreht wird,

    Hat hier jemand eine Idee?
    Ich habe gleich zwei,
    wenn Du Dir schon irgendwie ein Code aus dem Internet ziehst, dann versuche diesen auch zu verstehen und ggf zu debugen
    bitte poste (sowas) nicht unter fortgeschritten.

    Kommentar


    • #3
      Fotos die mit dem Smartphone aufgenommen wurden haben in den Exif-Daten welche du mit exif_read_data() auslesen kannst eine Information für 'Orientation'. Die musst du auslesen und behandeln, sprich das Bild entsprechend drehen.
      Das Thema wurde irgendwann schon mal hier im Forum behandelt. Habe es auf die Schnelle aber nicht gefunden. Das Problem selbst ist auch nicht so trivial, das das Thema unbedingt nach Einsteiger verschoben werden muss.

      Kommentar


      • #4
        jspit
        Meinst du diesen hier?
        https://www.php.de/forum/webentwickl...mobile-version

        Kommentar


        • #5
          Ist wohl einer der Threads. Jedoch sollte truemaster erstmal die Exif-Orientation seiner Bilder prüfen. Beim überfliegen des kopierten Codes sehe ich jedenfalls nichts was da das Bild drehen könnte.
          Muss auch dem Beitrag #2 zustimmen. Code aus dem Netz ziehen, hier reinwerfen und auf die Lösung warten, so ist das hier im Forum nicht gedacht.

          Kommentar


          • #6
            Zitat von jspit Beitrag anzeigen
            (..) Es ist auch nicht so trivial, das es unbedingt unter Einsteiger eingeordnet werden muss.
            naja,
            ich halte mich an nder einordnung zu fortgeschritten nicht am Code fest, sondern an der art, wie mit dem Problem umgegangen wird.
            Um jetzt nicht das ganze announce zu kopieren, mal ein absatz:
            …Eigeninitiative und Interesse am eigenen Problem zeigt, „Mach mal“ ist auf PHP.de allgemein unterwünscht und hier im Profi-Forum selbstverständlich überhaupt kein Thema meh
            Und wie du richtig schreibst
            Hat hier jemand eine Idee?
            ist keine eigeninititive.
            zudem gehe ich davon aus, das TE das announce nicht gelesen hat.

            Kommentar


            • #7
              Guten Morgen,

              Ihr habt natürlich recht. Entschuldigung. Trotzdem habe ich es mit Eurer Starthilfe und ein wenig Google geschafft. Mit dem Stichwort Exif habt Ihr mir sehr geholfen. Vielen Dank.


              PHP-Code:
              function correctImageOrientation($filename) {
                if (
              function_exists('exif_read_data')) {
                  
              $exif exif_read_data($filename);
                  if(
              $exif && isset($exif['Orientation'])) {
                    
              $orientation $exif['Orientation'];
                    if(
              $orientation != 1){
                      
              $img imagecreatefromjpeg($filename);
                      
              $deg 0;
                      switch (
              $orientation) {
                        case 
              3:
                          
              $deg 180;
                          break;
                        case 
              6:
                          
              $deg 270;
                          break;
                        case 
              8:
                          
              $deg 90;
                          break;
                      }
                      if (
              $deg) {
                        
              $img imagerotate($img$deg0);        
                      }

                      
              imagejpeg($img$filename95);
                    }
                  }
                }    

              Kommentar


              • #8
                Erstmal Ok das du dich selbst bemüht hast eine Lösung zu finden und diese hier auch zeigst.
                Wenn der Code nicht von dir ist, solltest du aber auch deine Quelle angeben.
                Der obige Code berücksichtigt jedoch nur die meist anzutreffenden Fälle. Theoretisch können als Orientation alle Werte von 1..8 geliefert werden.
                Nachteilig ist auch, das bei dir immer auf die Grafikdateien zurückgegriffen wird. Das bedeutet nicht nur Zeitverlust (da das Imagecreate relativ ist zeitaufwendig ist), sondern auch einen möglichen Qualitätsverlust durch das Speichern.
                Die Lösung ist durchgängig mit der Grafikressource zu arbeiten. Optimal wird das mit einer Klasse realisiert.

                Kommentar


                • #9
                  Ein Artikel der die Probleme mit gedrehten Bildern beschreibt und hinterleuchtet wie andere grosse Unternehmen damit umgehen
                  https://www.daveperrett.com/articles...g-is-a-ghetto/

                  Kommentar

                  Lädt...
                  X