Kompremierung eines JPEG mit PHP-Bordmitteln auslesen

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

  • Kompremierung eines JPEG mit PHP-Bordmitteln auslesen

    Hallo,

    gibt es eine Möglichkeit mit den Bordmitteln von PHP die Kompremierungsqualität eines JPEGs auszulesen?

    Herzliche Grüße,
    markus

  • #2
    Hallo,

    das kann ich mit einem klaren "jein" beantworten.

    Diese Qualitätseinstellung bezieht sich auf die Quantisierung beim Encoden, also Speichern eines Bildes, wird aber selbst nicht in der Datei gespeichert. Programme, die behaupten "das Originalbild hatte 85%" errechnen das anhand statistischer Merkmale der komprimierten Bilddaten, was aber sehr ungenau ist und genau aus diesem Grund in jedem Programm einen anderen Wert ergibt.

    Wenn du also diese komplizierten Statistik-Berechnungen (die man mit PHP theoretisch durchaus machen könnte) auf dich nehmen willst, um einen nichtssagenden Wert rauszubekommen, dann "ja".

    Wenn du einen exakten Wert erwartest, den du irgendwo codiert in den JPEG-Header-Feldern findest, dann "nein".

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 19.10.2009, 11:52.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Wenn's dir ganz doll wichtig ist und dir die Schnelligkeit egal ist, hab ich hier noch nen sehr, sehr unperformanten Skriptcode, der das Bild solange mit absteigender Qualität speichert, bis die Dateigröße ungefähr übereinstimmt:

      PHP-Code:
          $file = isset($_GET["path"]) ? $_GET["path"] : null;
          if (
      $file) {
              
      $size filesize($file);
              
      $img imagecreatefromjpeg($file);
              for (
      $i 0$i 100$i += 5) {
                  
      ob_start();
                  
      imagejpeg($imgnull100 $i);
                  
      $data ob_get_clean();
                  if (
      strlen($data) < $size) {
                      echo(
      "Estimated quality: " . (100 $i) . "%<br />\n");
                      break;
                  }
              }
          } 
      Aber wie gesagt, das was da raus kommt, hat nicht wirklich irgendeine Bedeutung.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Zitat von AmicaNoctis Beitrag anzeigen
        Wenn's dir ganz doll wichtig ist und dir die Schnelligkeit egal ist, hab ich hier noch nen sehr, sehr unperformanten Skriptcode, der das Bild solange mit absteigender Qualität speichert, bis die Dateigröße ungefähr übereinstimmt:

        PHP-Code:
            $file = isset($_GET["path"]) ? $_GET["path"] : null;
            if (
        $file) {
                
        $size filesize($file);
                
        $img imagecreatefromjpeg($file);
                for (
        $i 0$i 100$i += 5) {
                    
        ob_start();
                    
        imagejpeg($imgnull100 $i);
                    
        $data ob_get_clean();
                    if (
        strlen($data) < $size) {
                        echo(
        "Estimated quality: " . (100 $i) . "%<br />\n");
                        break;
                    }
                }
            } 
        Aber wie gesagt, das was da raus kommt, hat nicht wirklich irgendeine Bedeutung.
        Dafür bräuchtest du aber die unkomprimierte Originaldatei. Eine bereits komprimierte Datei nochmal zu komprimieren ist ziemlich sinnlos.

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          Dafür bräuchtest du aber die unkomprimierte Originaldatei. Eine bereits komprimierte Datei nochmal zu komprimieren ist ziemlich sinnlos.
          Das stimmt zwar, aber für den Vergleich der Dateigröße haut es trotzdem hin, da ich ja prüfe, ab welcher Qualität (absteigend) sie kleiner wird als die (komprimierte) Ausgangsdatei. Den Hinweis auf die dennoch mangelnde Aussagekraft dieses Wertes hatte ich ja ebenfalls schon gegeben.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Ok, vergiss das Script. H3ll hatte Recht. Zwischen 100% und 60% haut das so halbwegs hin, aber ich hab grad mal nen Extremfall getestet: Eine Datei mit 5% gespeichert und durch das Skript gejagt. Ergebnis: 70%

            Also absolut unbrauchbar. Sorry für das Wecken falscher Hoffnungen!
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              OffTopic:

              @AmicaNoctis: Für den Support, den Du hier im Forum bietest, könnte man Geld verlangen. Ernsthaft - Hut ab!

              Kommentar


              • #8
                OffTopic:
                Sowas hört man gern. Dankeschön
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Auch hier nochmal: Vielen Dank!

                  Kommentar


                  • #10
                    Problem mit der Dateigrößen-Vergleichslösung ist allerdings auch, dass so ein JPeg über nette Metatags verfügen kann. Die Idee ist aber sehr kreativ

                    Kommentar


                    • #11
                      Zitat von PHP-Desaster Beitrag anzeigen
                      Problem mit der Dateigrößen-Vergleichslösung ist allerdings auch, dass so ein JPeg über nette Metatags verfügen kann. Die Idee ist aber sehr kreativ
                      An den EXIF-Daten bin ich gerade am werkeln, bei 4000 Dateien konnte ich durch das entfernen der Metatags (Mithilfe von "jpegtrans") immerhin knappe 40 MB einsparen.

                      Kommentar


                      • #12
                        Gibt es vielleicht ein kleines Kommandozeilentool, das mir zumindest annähernd perfomant ein Ergebnis zurückliefern kann (es sollen ca. 10.000 Images gescannt werden)?

                        Im Grunde muss es auch nicht so in die Tiefe gehen, denn mich interessieren nur die Bilder die (wahrscheinlich) mit voller Qualität gespeichert worden sind?

                        Kommentar


                        • #13
                          jpegdump

                          Kommentar


                          • #14
                            Zitat von onemorenerd Beitrag anzeigen
                            jpegdump
                            Das ermittelt aber auch keine Qualitätsangabe.
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              Ich meine dieses: Jpegdump.c - dump JPEG marker information

                              Kommentar

                              Lädt...
                              X