Mit dieser Funktion kann man Bilddateien, die eine falsche Dateiendung aufweisen, automatisch umbenennen lassen.
Die Funktion liest das korrekte Bildformat aus und ändert die Dateiendung entsprechend.
Die UDF:
		
	
Beispiel:
	
Die Funktion liest das korrekte Bildformat aus und ändert die Dateiendung entsprechend.
Die UDF:
Show ContentSpoiler:
		
#Region ;************ Includes ************
#include-once
#include <GDIPlus.au3>
#EndRegion ;************ Includes ************
Global $__g_iIFFE_DEBUG = True ; True = Debug-Ausgaben eingeschaltet
If $__g_hGDIPDll = 0 Then
    _GDIPlus_Startup()
    OnAutoItExitRegister('__IFFE_Exit')
EndIf
Global Const $__g_aGDIPDecoders = _GDIPlus_Decoders()
Global Const $__g_sIFFE_Version = '1.0.0.0'
Global Const $__g_sIFFE_Date = '2017-10-16 12:00:00'
Func __IFFE_Exit()
    _GDIPlus_Shutdown()
EndFunc   ;==>__IFFE_Exit
;===============================================================================
; Function Name:   _GDIPlus_ImageFixFileExtension($sFilename)
; Description:     Diese Funktion korrigiert die Dateiendung einer Bilddatei,
;                  wenn die Bilddatei eine falsche Endung aufweist.
;                  Existiert der neue Dateiname bereits, wird der neue Dateiname
;                  um einen Zaehler " (n)" erweitert.
;                  Wenn die bereits existierende Datei allerdings inhaltsgleich
;                  (gleiche CRC32-Checksumme) ist, mit der neuen Datei,
;                  dann wird die Datei mit der falschen Endung geloescht.
; Parameter(s):    $sFilename = Dateiname und -pfad der Bilddatei
; Requirement(s):  #include <GDIPlus.au3>
; Return Value(s): bei Erfolg = der neue Dateiname
;                     @extended = 0 - die Datei wurde umbenannt
;                     @extended = 1 - die Datei wurde nicht umbenannt
;                     @extended = 2 - die Datei war identisch mit einer
;                                     bereits existierenden Datei
;                  im Fehlerfall wird 0 zurueckgegeben und
;                     @error = 1 wenn FileMove fehlgeschlagen ist
;                     @error = 2 wenn PathYetAnotherMakeUniqueName fehlgeschlagen ist
;                     @error = Rueckgabe von _GDIPlus_ImageGetRawFormat, wenn
;                              Datei nicht vorhanden oder keine Bilddatei
; Author(s):       Oscar & Bitnugger (www.autoit.de)
;===============================================================================
Func _GDIPlus_ImageFixFileExtension($sFilename)
    Local $hImage, $aRet, $iFormat = -1, $iError, $aExt, $sNewFile, $aCrc32[2]
    $hImage = _GDIPlus_ImageLoadFromFile($sFilename)
    $aRet = _GDIPlus_ImageGetRawFormat($hImage)
    $iError = @error
    _GDIPlus_ImageDispose($hImage)
    If $iError Then Return SetError($iError, 0, 0)
    For $i = 1 To $__g_aGDIPDecoders[0][0]
        If $aRet[1] = $__g_aGDIPDecoders[$i][5] Then
            $iFormat = $i
            ExitLoop
        EndIf
    Next
    If $iFormat = -1 Then Return SetError(30, 0, 0)
    __IFFE_DebugPrint('> _GDIPlus_ImageFixFileExtension(): FileName   = ' & $sFilename & @CRLF)
    __IFFE_DebugPrint('> _GDIPlus_ImageFixFileExtension(): Format     = ' & $__g_aGDIPDecoders[$iFormat][5] & @CRLF)
    __IFFE_DebugPrint('> _GDIPlus_ImageFixFileExtension(): Extensions = ' & $__g_aGDIPDecoders[$iFormat][6] & @CRLF)
    $aExt = StringSplit(StringReplace(StringLower($__g_aGDIPDecoders[$iFormat][6]), '*', ''), ';', 2)
    For $sExt In $aExt
        If $sExt = StringRegExpReplace($sFilename, '(?:.+)(\..+)', '$1') Then Return SetError(0, 1, $sFilename)
    Next
    $sNewFile = StringRegExpReplace($sFilename, '(.+)\..+', '$1') & $aExt[0]
    If FileExists($sNewFile) Then
        $aCrc32[0] = __IFFE_ComputeCrc32($sFilename)
        If @error Then Return SetError(40, 0, 0)
        $aCrc32[1] = __IFFE_ComputeCrc32($sNewFile)
        If @error Then Return SetError(40, 0, 0)
        If $aCrc32[0] = $aCrc32[1] Then
            __IFFE_DebugPrint(StringFormat('! _GDIPlus_ImageFixFileExtension(): Diese Dateien sind identisch:\r' & _
                    '! --> Crc32 = 0x%s  %s\t - Falsche Dateierweiterung  (wird gelöscht)\r' & _
                    '+ --> Crc32 = 0x%s  %s\t - Richtige Dateierweiterung (wird behalten)\r', _
                    $aCrc32[0], $sFilename, $aCrc32[1], $sNewFile))
            FileDelete($sFilename)
            Return SetError(0, 2, $sNewFile)
        EndIf
    EndIf
    $aRet = DllCall('shell32.dll', 'int', 'PathYetAnotherMakeUniqueName', 'wstr', '', 'wstr', $sNewFile, 'ptr', 0, 'ptr', 0)
    If @error Or Not $aRet[0] Then Return SetError(2, 0, 0)
    $sNewFile = $aRet[1]
    Return FileMove($sFilename, $sNewFile, 1) ? SetError(0, 0, $sNewFile) : SetError(1, 0, 0)
EndFunc   ;==>_GDIPlus_ImageFixFileExtension
Func __IFFE_DebugPrint($sString)
    If $__g_iIFFE_DEBUG Then ConsoleWrite($sString)
EndFunc   ;==>__IFFE_DebugPrint
Func __IFFE_ComputeCrc32($sFilePath)
    Local $hFile, $bData, $iLen, $tData, $aRet
    $hFile = FileOpen($sFilePath, $FO_BINARY)
    If $hFile = -1 Then Return SetError(1, 0, 0)
    $bData = FileRead($hFile)
    FileClose($hFile)
    $iLen = BinaryLen($bData)
    If $iLen = 0 Then Return SetError(2, 0, 0)
    $tData = DllStructCreate('byte[' & $iLen & ']')
    DllStructSetData($tData, 1, $bData)
    $aRet = DllCall('ntdll.dll', 'dword', 'RtlComputeCrc32', 'dword', 0, 'struct*', DllStructGetPtr($tData), 'int', $iLen)
    If @error Or Not $aRet[0] Then Return SetError(@error + 10, @extended, 0)
    Return Hex($aRet[0], 8)
EndFunc   ;==>__IFFE_ComputeCrc32
Beispiel:
#include '_GDIPlus_ImageFixFileExtension.au3'
$vRet = _GDIPlus_ImageFixFileExtension('d:\test.jpg')
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $vRet = ' & $vRet & @CRLF & '>Error code: ' & @error & @CRLF & '>Extended code: ' & @extended & @CRLF) ;### Debug Console
	
Hinweise: 
Ich benutze für den Arduino die Arduino-IDE.
Für AutoIt benutze ich die aktuelle AutoIt-Version sowie SciTE4AutoIt3.
Eine Hilfe kann ich nur auf Basis dieser Software leisten.
	Ich benutze für den Arduino die Arduino-IDE.
Für AutoIt benutze ich die aktuelle AutoIt-Version sowie SciTE4AutoIt3.
Eine Hilfe kann ich nur auf Basis dieser Software leisten.

