Animiertes GIF in einzelne Frames splitten?

  • Hi,

    weiß jemand wie ich mit Autoit ein animiertes GIF in einzelne Frames zerlegen und jeden Frame dann als separates Bild abspeichern kann?

    mfg
    chip

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Du kannst die _GDIPlus_GIFAnim.au3 von hier benutzen.

    Beispiel zum Extrahieren:

    [autoit]


    #AutoIt3Wrapper_Version=b
    #include <Array.au3>
    #include "_GDIPlus_GIFAnim.au3"

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_Startup()
    Global $binGif = Binary(FileRead("BoingRed v2.1.gif"))
    Global $hGIFImage = _GDIPlus_BitmapCreateFromMemory($binGif)

    [/autoit][autoit][/autoit][autoit]

    Global Const $iAnimDimCount = _GDIPlus_GIFAnimGetFrameDimensionsCount($hGIFImage), _
    $tGUID = _GDIPlus_GIFAnimGetFrameDimensionsList($hGIFImage, $iAnimDimCount), _
    $iAnimFrameCount = _GDIPlus_GIFAnimGetFrameCount($hGIFImage, $tGUID), _
    $aFrameDelays = _GDIPlus_GIFAnimGetFrameDelaysFromBinFile($binGif, $iAnimFrameCount)

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite("Extracting " & Int($iAnimFrameCount) + 1 & " frames to disk and resizing each frame to 32x32 pixels..." & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GIFAnimExtractAllFrames($hGIFImage, @ScriptDir & "\BoingRed v2.1_frames\BoingRed.gif", 85, 32, 32, 2, 1)
    ;~ FileWrite("c:\Temp\GIFAnim.delay.txt", _ArrayToString($aFrameDelays))

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_BitmapDispose($hGIFImage)
    _GDIPlus_Shutdown()
    ConsoleWrite("Done." & @CRLF)

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hier ist eine Funktion enthalten, um einzelne Frames zu erhalten
    http://www.autoitscript.com/forum/topic/96132-gif-animation/

  • Leider geht das Beispiel nicht UEZ. Kommt die Meldung:

    ""\_GDIPlus_GIFAnim.au3" (34) : ==> Variable used without being declared.:
    Local Const $aResult = DllCall($__g_hGDIPDll, "int", "GdipImageGetFrameDimensionsCount", "handle", $hImage, "ulong*", 0)
    Local Const $aResult = DllCall(^ ERROR"

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hast es mit der neusten Beta probiert? Eigentlich sollte es ab der Version 3.3.12.0 funzen.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Habs hinbekommen, hatte auf dem Rechner an dem ich grade bin noch die alte 3.3.10. mit der aktuellen 3.3.12 geht es.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.