WebP v0.3.1 build 2022-06-18 beta

  • Das Thema

    BLinz
    15. April 2022 um 11:57

    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:

    Beispiel 1:

    Beispiel 2:

    Beispiel 3:

    Beispiel 4:

    Beispiel 5:

    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.

  • Wow,

    bei mir macht es das ohne murren.

    Windows 11 64 bit und Autoit v3.3.14.5


    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Momentan werden nur Bilder decodiert, keine animierten Bilder und kein Encoding in das WebP Format.

    Danke für euer Feeback!

    funkey: danke für den Link.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • UEZ 21. April 2022 um 10:15

    Hat den Titel des Themas von „WebP Bilder in Autoit v0.1.0 build 2022-04-20 beta“ zu „WebP Bilder in Autoit v0.1.5 build 2022-04-21 beta“ geändert.
  • Mehr zum Thema WebP API kann hier eingesehen werden: https://developers.google.com/speed/webp/docs/api.

    ....3 Sekunden gescrollt....und schon Krämpfe bekommen....

    Zitat

    Simple Encoding API

    Some very simple functions are supplied for encoding arrays of RGBA samples in most common layouts. They are declared in the webp/encode.h header as:

    Code
    <strong>size_t WebPEncodeRGB(const uint8_t* rgb, int width, int height, int stride, float quality_factor, uint8_t** output);
    size_t WebPEncodeBGR(const uint8_t* bgr, int width, int height, int stride, float quality_factor, uint8_t** output);
    size_t WebPEncodeRGBA(const uint8_t* rgba, int width, int height, int stride, float quality_factor, uint8_t** output);
    size_t WebPEncodeBGRA(const uint8_t* bgra, int width, int height, int stride, float quality_factor, uint8_t** output);
    </strong>

    The quality factor quality_factor ranges from 0 to 100 and controls the loss and quality during compression. The value 0 corresponds to low quality and small output sizes, whereas 100 is the highest quality and largest output size. Upon success, the compressed bytes are placed in the *output pointer, and the size in bytes is returned (otherwise 0 is returned, in case of failure). The caller must call WebPFree() on the *output pointer to reclaim memory.

    The input array should be a packed array of bytes (one for each channel, as expected by the name of the function). stride corresponds to the number of bytes needed to jump from one row to the next. For instance, BGRA layout is:

    There are equivalent functions for lossless encoding, with signatures:

    KLUGSCHEISSMODUS ON

    KATASTROPHE!!!!

    So etwas passiert, wenn derjenige, der eine Dokumentation schreibt, keine oder nur unzureichende Ahnung hat, von dem was er dort tut!

    Das sog. "Padding" beschreibt "aufzufüllende" Bytes am Ende einer Zeile, wenn die Länge der Zeile in Bytes nicht ganzzahlig (meist durch 4 geteilt) in das einlesende Format (meist 4 Bytes =>DWORD) passt.

    Beispiel: Format BGR oder RGB (24BitPerPixel BBP): In der Zeile sind 3 Pixel, multipliziert mit 3 Byte per Pixel ergibt 9 Bytes. Damit diese Zeile in DWORDs eingelesen werden kann, muss auf die nächste durch 4 teilbare Zahl an Bytes, also in diesem Fall 12 Bytes, aufgefüllt werden. Man hängt also an die 9 Bytes "Pixel" noch 3 (idR Null-)Bytes an!

    Ein sowieso durch 4 Bytes teilbares Format, (hier 32 Bit/4 Bytes) BGRA oder RGBA hat NIEMALS padding Bytes!

    Erstens setzt die Beschreibung vorraus, dass man sich den "Teiler" zur Ermittlung des Padding, also die in Bitmaps (idR verwendeten 4 oder welche Zahl auch immer) Bytes als Teiler der Zeilenlänge aus den Fingern zieht, in der Dokumentation steht dazu jedenfalls nichts!

    Zweitens ist die Darstellung in Tabellenform schlicht falsch, "padding bytes" sind nur bei den Formaten RGB/BGR erforderlich....

    Da ich aber davon ausgehe, dass diese API ausschliesslich von Leuten verwendet wird, die wissen, was sie dort tun, stelle ich mir einfach nur das kurze Grinsen derjenigen vor, die diesen "Fail" auch bemerkt haben :klatschen:

    KLUGSCHEISSMODUS OFF

    Habe auch mal in den Source-Code geguckt...ist natürlich vom allerfeinsten^^


    UEZ

    Klasse Arbeit!! :thumbup:

    Hast du die *.h-Files nach Freebasic transferiert und dann mit den *.lib Dateien gelinkt?

    Da ja sämtliche ausführbaren Dateien als Kommandozeilenversion vorliegen, könnte man über eine schicke AutoIt-GUI nachdenken...incl. Vorschaufunktion ggf. per UEZ´s UDF...

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (21. April 2022 um 11:47)

  • UEZ

    Klasse Arbeit!! :thumbup:

    Hast du die *.h-Files nach Freebasic transferiert und dann mit den *.lib Dateien gelinkt?

    Hi Andy,

    nur einige Teile von der decode.h. Die *.lib funzen nicht, musste die libwebp_x??.a nehmen. Primär wollte ich einfach die WebP Bilder in Autoit benutzen können und habe mich deshalb nur auf das Wesentliche beschränkt.

    Ob sich der Aufwand lohnt alle Funktion in die DLL zu packen, weiß ich noch nicht.

    Danke für dein Feedback.

    Off-Topic: dieses Jahr waren die Beiträge in der revision echt mau... :(

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (21. April 2022 um 15:12)

  • UEZ 21. April 2022 um 22:16

    Hat den Titel des Themas von „WebP Bilder in Autoit v0.1.5 build 2022-04-21 beta“ zu „WebP Bilder in Autoit v0.2.0 build 2022-04-21 beta“ geändert.
  • Kleines Update: das von der DLL zurückgegebene GDI+ Bitmap Handle war korrupt, sodass es immer zum Absturz kam, sobald man damit weiter arbeiten wollte.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • mhh, UEZ danke für deine bisherige Arbeit.

    Und für die 3 Beispiele, gerade WebP Example3.au3 ist hilfreich weil ich so leicht an die Auflösung des Bildes für die Skalierung komme.

    Und ich kann vorher prüfen ob es animiert ist oder nicht.

    Da die Bilder ins GDI+ umgewandelt werden nehme ich an das es mit den Animationen schon eine kompliziertere Nummer wird?

    Ich habe gerade die Beispiel-Kommandozeilentool von google getestet und bin begeistert wie schnell z.B. die vwebp.exe ist, auch bei großen Animationen

  • Path2DLL... warum nicht als Einzeiler?

    AutoIt
    Func Path2DLL($sPath2DLL)
        Return $sPath2DLL ? $sPath2DLL : @ScriptDir & (@AutoItX64 ? "\_WebP_x64.dll" : "\_WebP_x86.dll")
    EndFunc   ;==>Path2DLL
  • UEZ 1. Mai 2022 um 14:40

    Hat den Titel des Themas von „WebP Bilder in Autoit v0.2.0 build 2022-04-21 beta“ zu „WebP v0.2.5 build 2022-04-30 beta“ geändert.
  • Path2DLL... warum nicht als Einzeiler?

    AutoIt
    Func Path2DLL($sPath2DLL)
        Return $sPath2DLL ? $sPath2DLL : @ScriptDir & (@AutoItX64 ? "\_WebP_x64.dll" : "\_WebP_x86.dll")
    EndFunc   ;==>Path2DLL

    Danke, hab's geändert. :thumbup:

    Es gibt eine neue Version -> siehe Beitrag #1:

    • WebP_CreateWebPLossySimpleFromBitmap
    • WebP_CreateWebPLosslessSimpleFromBitmap

    hinzugefügt. Man kann jetzt Bilder als WebP speichern (keine Animationen!). "Advanced" Version mit mehr Einstellmöglichkeiten kommt noch...

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • UEZ 15. Mai 2022 um 01:33

    Hat den Titel des Themas von „WebP v0.2.5 build 2022-04-30 beta“ zu „WebP v0.3.0 build 2022-05-07 beta“ geändert.
  • Neue Version -> siehe Beitrag #1:

    • Advanced Encoding hinzugefügt
    • WebP Advanced Encoder GUI

    Dekodierung von WebP Animationen ist ein bissl komplizierter als ich dachte...

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • UEZ 18. Juni 2022 um 16:11

    Hat den Titel des Themas von „WebP v0.3.0 build 2022-05-07 beta“ zu „WebP v0.3.1 build 2022-06-18 beta“ geändert.