Das Thema
Thema
Bilder im webp Format in GUI anzeigen
Moin,
gibt es eine Möglichkeit das webp Bildformat in einer AutoIt-GUI anzeigen zu lassen?
Beispielbilder findet man unter
https://developers.google.com/speed/webp/gallery1, z.B.
https://www.gstatic.com/webp/gallery/1.webpIch vermute es würde mit einem eingebetteten IE gehen, aber eventuell gibt es ja auch eine einfachere Methode.
Dabei gibt es ja wie bei GIF auch die Möglichkeit animierte webp-Bilder zu erstellen, Beispiel:
https://mathiasbynens.be/demo/animated-webpIch habe schon ein wenig…
hat mich neugierig gemacht, und deshalb habe ich eine kleine DLL gebastelt, die WebP Bilder in GDI+ / GDI umwandelt, sodass man sie direkt in Autoit benutzen kann.
Das Archiv beinhaltet u.a. die DLLs (x86 / x64), die zum Umwandeln benötigt werden.
UDF:
;Version 0.3.1 build 2022-06-13 beta
#include-once
#include <GDIPlus.au3>
Enum $WEBP_PRESET_DEFAULT = 0, _ ; default preset.
$WEBP_PRESET_PICTURE, _ ; digital picture, like portrait, inner shot
$WEBP_PRESET_PHOTO, _ ; outdoor photograph, with natural lighting
$WEBP_PRESET_DRAWING, _ ; hand or line drawing, with high-contrast details
$WEBP_PRESET_ICON, _ ; small-sized colorful images
$WEBP_PRESET_TEXT ; text-like
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_Ver
; Description ...: Displays the DLL version information in a messagebox window
; Syntax ........: WebP_Ver([$sPath2DLL = ""])
; Parameters ....: $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir
; Return values .: None
; Author ........: UEZ
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func WebP_Ver($sPath2DLL = "")
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found
DllCall($sDLL, "none", "WebP_DLL_Version")
Return True
EndFunc ;==>WebP_Ver
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_Ver2
; Description ...: Returns the DLL version information
; Syntax ........: WebP_Ver([$sPath2DLL = ""])
; Parameters ....: $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir
; Return values .: DLL version
; Author ........: UEZ
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func WebP_Ver2($sPath2DLL = "")
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found
Return DllCall($sDLL, "str", "Web_DLL_Version2")[0]
EndFunc ;==>WebP_Ver
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_BitmapGetInfo
; Description ...: Gets some rudimentary information about the WebP image
; Syntax ........: WebP_BitmapGetInfo($sFilename[, $sPath2DLL = ""])
; Parameters ....: $sFilename - file to load
; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir
; Return values .: Struct
; Author ........: UEZ
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://developers.google.com/speed/webp
; Example .......: No
; ===============================================================================================================================
Func WebP_BitmapGetInfo($sFilename, $sPath2DLL = "")
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found
If Not FileExists($sFilename) Then Return SetError(2, 0, 0) ;file not found
Local $iFileSize = FileGetSize($sFilename), $nBytes
Local $tBuffer = DllStructCreate("struct;byte bin[" & $iFileSize & "];endstruct")
Local Const $hFile = _WinAPI_CreateFile($sFilename, 2, 2)
_WinAPI_ReadFile($hFile, $tBuffer, $iFileSize, $nBytes)
_WinAPI_CloseHandle($hFile)
If Int(BinaryMid($tBuffer.bin, 1, 4)) <> 1179011410 Or Int(BinaryMid($tBuffer.bin, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP
Local $tWebPBitstreamFeatures = DllStructCreate("struct;long width; long height; long has_alpha; long has_animation; long format; ulong pad[5];endstruct")
Local $iReturn = DllCall($sDLL, "long", "WebP_BitmapGetInfo", "struct*", $tBuffer, "uint", $iFileSize, "struct*", $tWebPBitstreamFeatures)
If $iReturn = 0 Then Return SetError(4, 0, 0)
Return $tWebPBitstreamFeatures
EndFunc ;==>WebP_BitmapGetInfo
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_BitmapCreateGDIp
; Description ...: Converts (decodes) a WebP image from disk to a GDI / GDI+ bitmap handle
; Syntax ........: WebP_BitmasFilename[, $bGDIImage = False[, $sPath2DLL = ""]])
; Parameters ....: $sFilename - file to load
; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). If True then output is GDI bitmap handle
; $bCountColors - [optional] a boolean value. Default is False. If True then the colors will be counted and saved in extended. Use @extended to get color count.
; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir
; Return values .: GDI / GDIPlus bitmap handle and color count if $bCountColors = True in extended.
; Author ........: UEZ
; Modified ......:
; Remarks .......: Currently only WebP images are supported - no animated WebP images yet!
; Related .......:
; Link ..........: https://developers.google.com/speed/webp
; Example .......: No
; ===============================================================================================================================
Func WebP_BitmapCreateGDIp($sFilename, $bGDIImage = False, $bCountColors = False, $sPath2DLL = "")
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found
If Not FileExists($sFilename) Then Return SetError(2, 0, 0) ;file not found
Local $iFileSize = FileGetSize($sFilename), $nBytes
Local $tBuffer = DllStructCreate("byte bin[" & $iFileSize & "]")
Local Const $hFile = _WinAPI_CreateFile($sFilename, 2, 2)
_WinAPI_ReadFile($hFile, $tBuffer, $iFileSize, $nBytes)
_WinAPI_CloseHandle($hFile)
If Int(BinaryMid($tBuffer.bin, 1, 4)) <> 1179011410 Or Int(BinaryMid($tBuffer.bin, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP
Local $tColors = DllStructCreate("struct;ulong cc;endstruct")
Local Const $hBitmap = DllCall($sDLL, "ptr", "WebP_BitmapCreateGDIp", "struct*", $tBuffer, "uint", $iFileSize, "boolean", $bGDIImage, "boolean", $bCountColors, "struct*", $tColors)[0]
If $hBitmap = 0 Then Return SetError(4, 0, 0)
Return SetExtended($tColors.cc, $hBitmap)
EndFunc ;==>WebP_BitmapCreateGDIp
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_BitmapCreateGDIpFromMem
; Description ...: Converts (decodes) a WebP image from memory to a GDI / GDI+ bitmap handle
; Syntax ........: WebP_BitmapCreateGDIpFromMem($tBuffer[, $iBufferSize = 0[, $bGDIImage = False[, $sPath2DLL = ""]]])
; Parameters ....: $tBuffer - a dll struct with WebP binary data as content or pointer to the memory data
; $iBufferSize - the size of the binary data (file size)
; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). If True then output is GDI bitmap handle
; $bCountColors - [optional] a boolean value. Default is False. If True then the colors will be counted and saved in extended. Use @extended to get color count.
; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir
; Return values .: GDI / GDIPlus bitmap handle and color count if $bCountColors = True in extended.
; Author ........: UEZ
; Modified ......:
; Remarks .......: Currently only WebP images are supported - no animated WebP images yet!
; Related .......:
; Link ..........: https://developers.google.com/speed/webp
; Example .......: No
; ===============================================================================================================================
Func WebP_BitmapCreateGDIpFromMem($tBuffer, $iBufferSize = 0, $bGDIImage = False, $bCountColors = False, $sPath2DLL = "")
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found
If $iBufferSize = 0 Then Return SetError(2, 0, 0)
Local $binMem
If IsPtr($tBuffer) Then
Local $tMem = DllStructCreate("byte bin[" & $iBufferSize & "]", $tBuffer)
$binMem = $tMem.bin
Else
$binMem = DllStructGetData($tBuffer, 1)
EndIf
If Int(BinaryMid($binMem, 1, 4)) <> 1179011410 Or Int(BinaryMid($binMem, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP
Local $tColors = DllStructCreate("struct;ulong cc;endstruct")
Local Const $hBitmap = DllCall($sDLL, "ptr", "WebP_BitmapCreateGDIp", "struct*", $tBuffer, "uint", $iBufferSize, "boolean", $bGDIImage, "boolean", $bCountColors, "struct*", $tColors)[0]
If $hBitmap = 0 Then Return SetError(4, 0, 0)
Return SetExtended($tColors.cc, $hBitmap)
EndFunc ;==>WebP_BitmapCreateGDIpFromMem
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_CreateWebPLossySimpleFromBitmap
; Description ...: Converts a bitmap to WebP lossy image and save it to HD
; Syntax ........: WebP_CreateWebPLossySimpleFromBitmap($sFilename, $hBitmap[, $iQuality = 75[, $sPath2DLL = ""]])
; Parameters ....: $sFilename - file to load
; $hBitmap - GDIPlus bitmap handle
; $iQuality - [optional] an integer value. Default is 75. Valid range is 0 - 100.
; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir.
; Return values .: 0 for failure, 1 for success.
; Author ........: UEZ
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://developers.google.com/speed/webp
; Example .......: No
; ===============================================================================================================================
Func WebP_CreateWebPLossySimpleFromBitmap($sFilename, $hBitmap, $iQuality = 75, $sPath2DLL = "")
If $sFilename = "" Then Return SetError(1, 0, 0)
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found
Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPLossySimpleFromBitmap", "str", $sFilename, "ptr", $hBitmap, "float", $iQuality)[0]
If $iReturn = 0 Then Return SetError(3, 0, 0)
Return 1
EndFunc ;==>WebP_CreateWebPLossySimpleFromBitmap
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_CreateWebPLosslessSimpleFromBitmap
; Description ...: Converts a bitmap to WebP lossless image and save it to HD
; Syntax ........: WebP_CreateWebPLosslessSimpleFromBitmap($sFilename, $hBitmap[, $sPath2DLL = ""])
; Parameters ....: $sFilename - file to load
; $hBitmap - GDIPlus bitmap handle
; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir.
; Return values .: 0 for failure, 1 for success.
; Author ........: UEZ
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://developers.google.com/speed/webp
; Example .......: No
; ===============================================================================================================================
Func WebP_CreateWebPLosslessSimpleFromBitmap($sFilename, $hBitmap, $sPath2DLL = "")
If $sFilename = "" Then Return SetError(1, 0, 0)
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found
Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPLosslessSimpleFromBitmap", "str", $sFilename, "ptr", $hBitmap)[0]
If $iReturn = 0 Then Return SetError(3, 0, 0)
Return 1
EndFunc ;==>WebP_CreateWebPLosslessSimpleFromBitmap
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_CreateWebPAdvancedFromBitmap
; Description ...: Converts a bitmap to WebP lossy / lossless image and save it to HD
; Syntax ........: WebP_CreateWebPAdvancedFromBitmap($sFilename, $hBitmap[, $WebPPreset = $WEBP_PRESET_DEFAULT[, $lossless = 0[,
; $quality = 75.0[, $method = 4[, $sns_strength = 50[, $filter_sharpness = 0[, $filter_strength = 60[,
; $pass = 1[, $level = 6[, $sPath2DLL = ""]]]]]]]]]])
; Parameters ....: $sFilename - file to load
; $hBitmap - GDIPlus bitmap handle
; $WebPPreset - [optional] an unknown value. Default is $WEBP_PRESET_DEFAULT.
; $lossless - [optional] an unknown value. Default is 0. 0 for lossy encoding / 1 for lossless..
; $quality - [optional] an unknown value. Default is 75.0. Valid range is 0 - 100.
; $method - [optional] a map. Default is 4. Valid range is 0 - 6 (0=fast, 6=slower-better).
; $sns_strength - [optional] a string value. Default is 50. Spatial Noise Shaping. 0=off, 100=maximum
; $filter_sharpness - [optional] a floating point value. Default is 0. Range: [0 = off .. 7 = least sharp]
; $filter_strength - [optional] a floating point value. Default is 60. Range: [0 = off .. 100 = strongest]
; $pass - [optional] a pointer value. Default is 1. Number of entropy-analysis passes (in [1..10]).
; $level - [optional] an unknown value. Default is 6. Between 0 (fastest, lowest compression) and 9 (slower, best compression) only valid for lossless = 1!
; $near_lossless - [optional] an unknown value. Default is 100. Near lossless encoding [0 = max loss .. 100 = off (default)].
; $alpha_compression - [optional] an unknown value. Default is 1. Algorithm for encoding the alpha plane (0 = none,1 = compressed with WebP lossless). Default is 1.
; $alpha_filtering - [optional] an unknown value. Default is 1. Predictive filtering method for alpha plane.0: none, 1: fast, 2: best. Default if 1.
; $alpha_quality - [optional] an unknown value. Default is 100. Between 0 (smallest size) and 100 (lossless). Default is 100.
; $target_size - [optional] an unknown value. Default is 0. If non-zero, set the desired target size in bytes.
; $NoSave - [optional] an unknown value. Default is False.
; $pMem - [optional] a string value. Default is Null. If $NoSave = True then the pointer to the memory which holds the data will be returned.
; $pCallback - [optional] a pointer value. Default is 0. Pointer to a callback address for progress hook.
; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir.
; Return values .: negative value for failure, 1 for success or the struct with information (pointers, size) if $NoSave = True
; Author ........: UEZ
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://developers.google.com/speed/webp
; Example .......: No
; ===============================================================================================================================
Func WebP_CreateWebPAdvancedFromBitmap($sFilename, $hBitmap, $WebPPreset = $WEBP_PRESET_DEFAULT, $lossless = 0, $quality = 75.0, $method = 4, $sns_strength = 50, _
$filter_sharpness = 0, $filter_strength = 60, $pass = 1, $level = 6, $near_lossless = 100, $alpha_compression = 1, $alpha_filtering = 1, $alpha_quality = 100, _
$target_size = 0, $NoSave = False, $pCallback = 0, $sPath2DLL = "")
If $sFilename = "" And Not $NoSave Then Return SetError(1, 0, 0)
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found
Local $tMem = DllStructCreate("struct;ptr pPic; ptr pWriter; ptr pMemData; uint memsize;endstruct")
Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPAdvancedFromBitmap", _
"str", $sFilename, _ ;Webp filename
"ptr", $hBitmap, _ ;handle to GDI+ bitmap
"long", $WebPPreset, _ ;WebPPreset
"long", $lossless, _ ;lossless
"float", $quality, _ ;quality
"long", $method, _ ;method
"long", $sns_strength, _ ;sns_strength
"long", $filter_sharpness, _ ;filter_sharpness
"long", $filter_strength, _ ;filter_strength
"long", $pass, _ ;pass
"long", $level, _ ;level
"long", $near_lossless, _ ;near_lossless
"long", $alpha_compression, _ ;alpha_compression
"long", $alpha_filtering, _ ;alpha_filtering
"long", $alpha_quality, _ ;alpha_quality
"long", $target_size, _ ;target_size
"bool", $NoSave, _ ;
"struct*", $tMem, _ ;
"ptr", @AutoItX64 ? $pCallback : 0)[0] ;x86 crashes for unknown reason
If $iReturn < 0 Then Return SetError(3, 0, $iReturn)
If $NoSave And $tMem.memsize = 0 Then SetError(4, 0, 0)
Return $NoSave ? $tMem : $iReturn
EndFunc ;==>WebP_CreateWebPAdvancedFromBitmap
; #FUNCTION# ====================================================================================================================
; Name ..........: WebP_FreeUp
; Description ...: Release the ressources from $tMem struct
; Syntax ........: WebP_FreeUp(Byref $tMem[, $sPath2DLL = ""])
; Parameters ....: $tMem - [in/out] a dll struct value.
; $sPath2DLL - [optional] a string value. Default is "".
; Return values .: 1
; Author ........: UEZ
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: https://developers.google.com/speed/webp
; Example .......: No
; ===============================================================================================================================
Func WebP_FreeUp(ByRef $tMem, $sPath2DLL = "")
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found
Local $iReturn = DllCall($sDLL, "long", "WebP_FreeUp", "struct*", $tMem)[0]
Return $iReturn
EndFunc ;==>WebP_FreeUp
; #FUNCTION# ====================================================================================================================
; Name ..........: BitmapCountColors
; Description ...: Counts the colors used by the bitmap
; Syntax ........: BitmapCountColors($hBitmap)
; Parameters ....: $hBitmap - a handle to a GDI+ bitmap.
; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle).
; Return values .: Number of colors used by the image.
; Author ........: UEZ
; Modified ......:
; Remarks .......: The result may differ from other programs for JPG images depending on the decoder.
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func BitmapCountColors($hBitmap = 0, $bGDIImage = False, $sPath2DLL = "")
If IsPtr($hBitmap) = 0 Or $hBitmap = 0 Then SetError(1, 0, 0)
Local $sDLL = Path2DLL($sPath2DLL)
If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found
Local $iReturn = DllCall(Path2DLL(), "ulong", "BitmapCountColors", "ptr", $hBitmap)[0]
Return $iReturn
EndFunc
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: Path2DLL
; Description ...: Return the path to the _WebP_x??.dll
; Author ........: UEZ
; Modified.......:
; Remarks .......: This function is used internally by WebP.au3
; ===============================================================================================================================
Func Path2DLL($sPath2DLL = "")
Return $sPath2DLL ? $sPath2DLL : @ScriptDir & (@AutoItX64 ? "\_WebP_x64.dll" : "\_WebP_x86.dll")
EndFunc ;==>Path2DLL
Alles anzeigen
Beispiel 1:
;Coded by UEZ
#AutoIt3Wrapper_UseX64=y
#include <GUIConstantsEx.au3>
#include "WebP.au3"
;~ Global $sFile
Global $sFile = FileOpenDialog("Select an image", "", "Images (*.webp)")
If @error Then Exit
Global Const $STM_SETIMAGE = 0x0172
_GDIPlus_Startup()
Global Const $hBitmap = WebP_BitmapCreateGDIp($sFile, True)
Global $tDim = DllStructCreate($tagBITMAP)
DllCall("gdi32.dll", "int", "GetObject", "int", $hBitmap, "int", DllStructGetSize($tDim), "ptr", DllStructGetPtr($tDim))
Global Const $iW = DllStructGetData($tDim, "bmWidth"), $iH = DllStructGetData($tDim, "bmHeight")
Global Const $hGUI = GUICreate("WebP Image Viewer", $iW, $iH)
GUISetBkColor(0xFFFFFF)
Global Const $iPic = GUICtrlCreatePic("", 0, 0, $iW - 1, $iH - 1)
_WinAPI_DeleteObject(GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap))
GUISetState()
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Alles anzeigen
Beispiel 2:
;Coded by UEZ
#AutoIt3Wrapper_UseX64=n
#include <GUIConstantsEx.au3>
#include "WebP.au3"
Global Const $STM_SETIMAGE = 0x0172
_GDIPlus_Startup()
Global Const $binData = _WebP_Test_Image(), $iLen = BinaryLen($binData)
Global $tMem = DllStructCreate("byte bin[" & BinaryLen($binData) & "]")
$tMem.bin = $binData
Global Const $hBitmap = WebP_BitmapCreateGDIpFromMem($tMem, $iLen, True)
Global $tDim = DllStructCreate($tagBITMAP)
DllCall("gdi32.dll", "int", "GetObject", "int", $hBitmap, "int", DllStructGetSize($tDim), "ptr", DllStructGetPtr($tDim))
Global Const $iW = DllStructGetData($tDim, "bmWidth"), $iH = DllStructGetData($tDim, "bmHeight")
Global Const $hGUI = GUICreate("WebP Image Viewer", $iW, $iH)
GUISetBkColor(0xFFFFFF)
Global Const $iPic = GUICtrlCreatePic("", 0, 0, $iW - 1, $iH - 1)
_WinAPI_DeleteObject(GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap))
GUISetState()
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()
$tMem.bin = ""
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05
Func _WebP_Test_Image($bSaveBinary = False, $sSavePath = @ScriptDir)
Local $WebP_Test_Image
$WebP_Test_Image &= 'UklGRgoLAABXRUJQVlA4IP4KAAAQegCdASqCAYsBP3G00mI8P7+/pBHaG/IuCWVu/FSUDQP65DOGlzh3srUbSh0m7gLnkn0zylfD+3W3563nm3UeUfYAr/I3Qj4CCxiTF7emTO+xvUY4kg2rzauyNuFY/JImZ7Gzl+m4xHjyVFILDmEMardGsjrGgb8sg2rzKF2nqKPwaNlAibxnwCndTWvaLGgb8sg2qziJeSAxdOBWiM329B65bkk7GgGY7TD2no+AgsYF+N0f4wih++8dx1UkdTEhrFLM1DaSpfcGILkHwrLKcMoqOsz5euU3pVxCCHb4jeFZBtXm1W0BrkRPsde55VHmI5xsRjQVb3N3Ckm8DsS9BHnKzJeHgn25dkrqUWraZ3iJ0Q0DflkG1eZe45wD+S/HEoF5ZVOXLULDz7SZ0PmAY4zSdG0zosPQPsjbgpubXQPiDy1LCfNqabcZ8ZgHG8dLOKqJGDbs4YEjEosPQF2U1di55z257vpQyE7H9J+tKAAeN7EPDKlR64Ng3gJrNivHFVHeSw9AXZTV2Lbz6w8jM96fhqkmafvL+uy2sqOYzn2Cx4bd6RGvCE5rzZegqLD1HCpC1RXtr3IUFGe3riu7n1A2qbRh2NnZsTWG7YHA9F/fj18zv2Kjh+DeNXV3GdkL9Ku7T4fMowjgYrSKUwyYYj9uTmEo0kzYeOriVnC2zLtaiV8ymz3OTuvrefOxerK8fs/nANGbkcdiQIt1gCUlor/XmxuQi0z4eZRVhyGprWmYDz1SrHGINSHErz1tzbjGZLiUOplRP2FvArcgR5lemd8NGPq8RD9DMy8EQV2nUWFUjz/9BUIXYPSNvaldhXBQpyZem++Us+1uoUZwjmgkwV8QGn+uI3XiNaywpcE/6lEk3vhI65DxdZPxI4oEgm5217rvXWqYtfrbUegNjXC+p+yKXl5qxN+bqma+NLY38ARNTq3ti2+bQvJuLfVmGJbFlv/Oi2N/AEhj'
$WebP_Test_Image &= '4byZlzbeSHQWAXS3M8WQAxJtYRPoJIyp6KPQrb+AJCW4VqlFzh/k2qkgih6B4nLokaBbIZ8DefxqUnPI/WW1Wozh8GIukagqQHdmHdnKkGHxZP0EhX37r2pkdmoezaSNRv/e0iBaZ4kq+jwPmekqZH40NLp9BYqUv+pIF6HmvHVmFza7qu/nrmL5t60qfjHnT61eRehUzIgqrONPjs9+Na9AXIefym+a1DD/TOAyqZxNL3FW5fYCSJKW1ZnXqZWCpTJFQM9GJYLtVodrcEZtIfWew4rrgQ5R/9VC5U0gF/SYa6ptJYbeOKi+FTKPuzR4UIRaN+ozvMVNGpV5fUc4AP7Nfz7/XlJelX+ZVC9IWFvg7C0YQyH2yiMSEAJ35/bC3y6fiUwLyIyh7vDAUkGhdq4okF1EPyI7s706NV1iFGKjfNgeq3jy5iaUheRPnmRn7tIg1eMagA9JDCAMJmd4rZ7MNksuzXUaBJgoUQVDmi2zjcb23mJeHnAzgbWjmwiOsa+V4Mk9d8pERRai6R0xbahUKpdkSoTrA7dw0U+wpkb6wHsG00+qwoGPSZEbVzeCc5xaL8TzynVuoIn4VZ0XbeAhURFUC4eRrSE0LE48d0oX3zP3u5lz/N4ReL0LGV0fXqP3hzk5f13oZ/ryxn9Rz1ZnZaLuY9O0UqcTQyTDO3uDV7Gmq0kqzZEuyHwGWe/CerSS8Q3qV9910ZZB9D1Hml49LH9cWV6R66TfsMsct/8n2t8eByIzx29kVl/VoezCVliuSIdODdFAwnGZRGQnR35828P0Nuh4eu6V8+BcO9IgMvJrKkJNCTOc/S+mzVbAHDbK1XHRKtBtiQUUAnphnopGERbB5q7BY2k6TT6ExQSBOiQf1ZBMZ8H8nYkQ5mW2y9St0nRhU9SR/0gMgE436G2NqGtD+sJVEZVEIY/kaqsoS6xw5QUwnhcunEAAHZvuPinWYhz2HJoOOyEadLenGjMgs70Rgcs4FdqjjPK0'
$WebP_Test_Image &= '8hLn5SiAOExx1rJ5s635eWCriVjAiOAKcKZ2z+yWAm38N8eA3JiLFCJsAAHY+TCOKgGLiW2+T+Z5wBlsmQeGe59EIORJzc56rNIJV1SuVxbhfyqsd3AorDS6BDEDRl4z0WhhRqoEmZGcnqJMHp5LjzuSd+xtaHENWjQAAAY7l1pOxcjnoOgGr3D9I7gpMvuS58lHYftetlTMpNmD35RM9dvEhyaZbFPnPEwdLNuuauuLUotZtMeI2JxNhFjDyg1fQdsSzwx8XRvL/y2xAABdMqXfbGeX2fNn3OvIDQ1K8AT3bw+N5PCu0bKdL2lckYWSKfS30Rz08eVMd+rcJvJJc0jW5QQ4CKABhsGGhl28kDl0eQ0UbXjql6GWoH1K6aMw+PDeA1kIUaK2kMAX2oeyV9jiDBR6DTTwxcjwwlX+jfUQtX77cxy8P46hgvro9UslDnrY+PnVrwfoPERvctInKui2iaLvIrT5eZlF5arVvvOD28aotqLK6UIrURhbszOIXHvhmdFtOQsmoAz5cKa0Gw8JHYI5FMKqa7obYYxXjdP4CO75mXs1gVWccDQdWIE1yZdFMEF9NONhndOgLzFrxs6HVW1Ue1c/hLxaZ+sfpSahHgn0Qy/8Yb/2FC/ArasImu4guO4AKL3pApwvE5eD+ohXZnlHWOCKQHT2wIXAkNKho23EbNZ4sXdqopg6Q9szzo0hFRgbvG9ROVTEH9cHxM1h7kZGmmK2y55DBvPFhBKgxt4a17zvvA2ts7P6cTiUGuJmMYcCx19JF2sC9wFgdZ5zTUf+TTYVmvYKIHnqTNvyFWbHTs/By5P1AIDHcLMKsfIFpHsyROo5wNjla7SFUc/5RHfOnHOjNIbCorL30m+72gtGeV13O9btU1tQ4VpADb8zq5yNR9TTV5r8CowdXl07Am/MmawihGeSlj4s46rxbVM0DmGDMU1SE5NP16V9ou3vjCbeFOXCw72MlVxvF3zftawVwAFyN3a/e1X3'
$WebP_Test_Image &= '+Unp+K1EZsqI4hDLSsXh3FwAAIf2GwYT9cX9NFTkS5YWjl230Fj8VlhfBzEEC6lBKY9wBzyn7ZXxJMNdS/Y0Dnk8e2YrkepX7qV7p545QxGYqbxfK+E/Vqb+yTwuUAJzKNzV25vb1cs98omMAATuDu2zYKodOJtO0bYy6tI3FAF5NXPaAWivkuqrExwrloFi/mG7HFrIMvEbnsSTPhoh1BKT+L1HFDa6PvBo1yhc4UYnr3ITJ7pqJSBp6Xu2T52NDbXuWCXnew4haL7peDlftd5xkdZgtWe3/Q/Vxov2QZq6jrNJDKo9iQPTuWDO1yeulWY+aXvjMqYIRPzIusnkop3iIX3VANrVxIIHEfyEiXDIkqU93hU3hLeABwZMeCcEzz5wLubpq1Q58qmdHgANGQp4RggzHBKjly8WL8ch8fsiithuaPFad2hCh51ZszDtPq5C2j5tWCca/6SE3+ySZKEo/AtaAvIMib0oK8M0Z6rAcIwVG0TAnWto/cqmGmbQAhsSNhFVYafhGDdV2aHAVQOzwaC8L+Y/0QT9YJY600pdjL1AkAf21pNPei+uhIjYR+RfjiTYjkWYHOtGpRa/V8OAKPQec2fwqecBOjQA60prWye6Vcrm2xKdQqL5G0hxR+xl89O8Idi0QBcKul3rEk9gx78n8KXI6ND4ai/2wvCivKhwDQwDWU3ZL8FGeW81XH8yL2rIvXo1Aa2Eo7s+gQwojP7HqJ9W4c/4JjU33BfB8Dw0yJTpWpNvAAAAAAEuuxacKAAAAAA='
Local $bString = _WinAPI_Base64Decode($WebP_Test_Image)
If @error Then Return SetError(1, 0, 0)
$bString = Binary($bString)
If $bSaveBinary Then
Local Const $hFile = FileOpen($sSavePath & "\Baby Tux small.webp", 18)
If @error Then Return SetError(2, 0, $bString)
FileWrite($hFile, $bString)
FileClose($hFile)
EndIf
Return $bString
EndFunc ;==>_WebP_Test_Image
Func _WinAPI_Base64Decode($sB64String)
Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
$aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
Return DllStructGetData($bBuffer, 1)
EndFunc ;==>_WinAPI_Base64Decode
Alles anzeigen
Beispiel 3:
;Coded by UEZ
#AutoIt3Wrapper_UseX64=n
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include "WebP.au3"
Global $sFile = FileOpenDialog("Select an image", "", "Images (*.webp)")
If @error Then Exit
Global $tBitmapInfo = WebP_BitmapGetInfo($sFile)
If Not @error Then MsgBox($MB_ICONINFORMATION, "WebP Bitmap Information", "Image width = " & $tBitmapInfo.width & @CRLF & _
"Image height = " & $tBitmapInfo.height & @CRLF & _
"Image format = " & ($tBitmapInfo.format = 0 ? "undefined " : ($tBitmapInfo.format = 1 ? "lossy" : "lossless")) & @CRLF & _
"Image has alpha = " & $tBitmapInfo.has_alpha & @CRLF & _
"Image has animation = " & $tBitmapInfo.has_animation)
WebP_Ver()
Alles anzeigen
Beispiel 4:
;Coded by UEZ
#AutoIt3Wrapper_UseX64=y
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include "WebP.au3"
Global $sFile = FileOpenDialog("Select an GDI+ supported image", "", "Images (*.jpg;*.png;*.bmp;*.gif;*.tif)")
If @error Then Exit
_GDIPlus_Startup()
Global $hImage = _GDIPlus_ImageLoadFromFile($sFile)
If Not $hImage Then Exit _GDIPlus_Shutdown()
Global $iReturn1 = WebP_CreateWebPLossySimpleFromBitmap(@ScriptDir & "\LossySimple.webp", $hImage, 1)
Global $iReturn2 = WebP_CreateWebPLosslessSimpleFromBitmap(@ScriptDir & "\LosslessSimple.webp", $hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
ShellExecute("Explorer.exe", ".", @ScriptDir)
Alles anzeigen
Beispiel 5:
;Coded by UEZ
#AutoIt3Wrapper_UseX64=n
#include <GUIConstantsEx.au3>
#include "WebP.au3"
Global $sFile = FileOpenDialog("Select an image to compress", "", "Images (*.jpg;*.bmp;*.png;*.gif;*.tif)")
If @error Then Exit
Global Const $STM_SETIMAGE = 0x0172
_GDIPlus_Startup()
Global $hImage = _GDIPlus_ImageLoadFromFile($sFile), $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
;Example with maximal lossy compression settings
Global $tMem = WebP_CreateWebPAdvancedFromBitmap("", $hImage, _
0, _ ;$WebPPreset (0 - 5)
0, _ ;$lossless (0 - 1)
0, _ ;$quality (0.0 - 100.0)
6, _ ;$method (0 - 6)
0, _ ;$sns_strength (0 - 100)
0, _ ;$filter_sharpness (0 - 7)
0, _ ;$filter_strength (0 - 100)
10, _ ;$pass (1 - 10)
9, _ ;$level (0 - 9) for lossless compression only
100, _ ;$near_lossless (0 - 100)
1, _ ;$alpha_compression (0 - 1)
2, _ ;$alpha_filtering (0 - 2)
0, _ ;$alpha_quality (0 - 100)
0, _ ;$target_size (0 = off, size in bytes)
True) ;hold the compressed image in memory only, no save to HD!
Global $hBitmap = WebP_BitmapCreateGDIpFromMem($tMem.pMemData, $tMem.memsize, True)
Global $tDim = DllStructCreate($tagBITMAP)
DllCall("gdi32.dll", "int", "GetObject", "int", $hBitmap, "int", DllStructGetSize($tDim), "ptr", DllStructGetPtr($tDim))
Global Const $iW = DllStructGetData($tDim, "bmWidth"), $iH = DllStructGetData($tDim, "bmHeight")
Global Const $hGUI = GUICreate("WebP Image Viewer (Image size: " & Round($tMem.memsize / 1024, 2) & " kb)", $iW * 2, $iH)
GUISetBkColor(0xFFFFFF)
Global Const $iPic_WebP = GUICtrlCreatePic("", 0, 0, $iW - 1, $iH - 1)
Global Const $iPic_Original = GUICtrlCreatePic("", $iW, 0, $iW - 1, $iH - 1)
_WinAPI_DeleteObject(GUICtrlSendMsg($iPic_WebP, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap))
_WinAPI_DeleteObject(GUICtrlSendMsg($iPic_Original, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap))
GUISetState()
_GDIPlus_ImageDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteObject($hHBitmap)
_GDIPlus_Shutdown()
WebP_FreeUp($tMem)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Alles anzeigen
WebP Advanced Encoder GUI.au3:

Bitte mal testen, ob's bei euch auch funzt.
Btw, die DLL ist in Freebasic geschrieben. 
Mehr zum Thema WebP API kann hier eingesehen werden: https://developers.google.com/speed/webp/docs/api.