[GD] animiertes Gif erkennen

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

  • [GD] animiertes Gif erkennen

    Wie kann ich erkennen, ob ein GIF animiert ist ?

    Problem:
    Bilder werden mit ImageMagick resized oder bearbeitet. Ist das GIF allerdings animiert, kommt IM wohl nicht mehr damit klar und läuft endlos weiter (es werden dann auch immer mehr neue Prozesse erzeugt)... Hat man dann keinen Shellzugang zum Webserver, hat man ein Problem (ein "killall convert" bereinigt das ganze)

    gruss

  • #2
    probier mal vorher zu prüfen, ob "Netscape2" im code steht ... obs allerdings bei allen animierten gifs so ist, ka
    Kissolino.com

    Kommentar


    • #3
      Ich kann nur in andere Sprache zeigen, da ich nicht gut in PHP bin
      Hier z.B. mit VB/VB.NET:

      - Du muss dir .gif-Datei öffnen.
      - Lese die komplette Datei in einem geeigneten Variable ein.
      - Suche die Stellen (Position) raus welche mit:
      sGifMagic = Chr$(0) & Chr$(33) & Chr$(249)
      anfängt und übernehme von Anfang bis zu der Stelle als Header, etwa
      sFileHeader = Left(sBuff, InStr(1, sBuff, sGifMagic) + 1)
      - Überprüfe erstmal, ob die Datei tatsächlich eine GIF-Datei ist, indem du die ersten 3 Stellen nach "GIF" prüft, da die Gif-Dateien nach dem Standard GIF89 mit GIF89 oder GIF89a anfängt
      isGif = True
      If Left$(sFileHeader, 3) <> "GIF" Then isGif = false
      - Wenn Dateiheader größer als 127, dann sind die Framesinformation für das Animieren im Header versteckt -> Folgerung: es ist ANIGIF:
      If isGif Then
      If Len(sFileHeader) >= 127 Then
      ...


      Viel Spass.

      Kommentar


      • #4
        falls einen die Lösung interessiert (imageMagick ist dafür erforderlich):

        PHP-Code:
        <?php
        function isAnimGif($sFile)
        {
            
        $output = array();

            
        exec('identify ' $sFile$output$retval);
            
            if (
        count($output) == 1)
            {
                return 
        false;
            }
            
            return 
        true;    
        }
        ?>
        folgendes liefert die shell zurück (gif mit 2 frames):
        Code:
        identify Banner_US.gif
        Banner_US.gif[0] GIF 468x60+0+0 PseudoClass 64c 8-bit 18475b 0.0u 0:01
        Banner_US.gif[1] GIF 468x60+8+2 PseudoClass 64c 8-bit 18475b 0.0u 0:01

        Kommentar

        Lädt...
        X