![]() |
Laden eines .webp Bildes?
Ich muss einige .webp Bilder laden und als jpeg speichern, und das unter FMX.
Leider habe ich bisher keine Weg gefunden, dies zu bewerkstelligen ohne irgendwelche externen dll oder dylib. Hat jemand vielleicht eine Idee wie ich dies realisieren kann, ohne eine Abhängigkeit von externen Komponenten? |
AW: Laden eines .webp Bildes?
Die webp-est, oder google kann alles besser Pest.
Wenn ich die englischen Wikipedia Einträge dazu richtig verstanden habe dann gibt es von google seite eine Referenz Implementierung. Um den Rest muss man sich selber kümmern. Da es aber schon seit Jahren von vielen Programmen unterstüzt wird sollte da auch Freeware existieren die du zur Not erstmal verbauen oder verwenden könntest. Als Fan von IrfanView ist dieses für mich das Mittel der Wahl. |
AW: Laden eines .webp Bildes?
Hmm..
ich habe vor Jahren mal mit WebP gebastelt und damit einen Wraper für TBitmap (VCL) erstellt. Damit konnte ich das .webp laden/speichern unter Verwendung der libwebp.dll. Dieses Bitmap kann dann einem jpeg zugewiesen werden und somit ein jpeg von einem webp erzeugt werden. Ob dieses mit dem TBitmap von FMX funktionniert, weiß ich nicht... Wenn du die Lösung als Beispiel haben willst, dann kann ich es ja mal hochladen, alternativ google mal danch Delhi und libwebp.dll... (ist halt bei mir nur eine rudimentäre Bastelarbeit, die irgendwie funktioniert ;) ) |
AW: Laden eines .webp Bildes?
Hier gibt es eine Bibliothek :
![]() Sind auch Beispiele da, die Dir zeigen, wie es geht |
AW: Laden eines .webp Bildes?
Zitat:
|
AW: Laden eines .webp Bildes?
Hmmm..
Zitat:
Ich denke ohne libwebp Lib wird es nicht gehen, es gibt keine 'reine' Pascal Implementation. unter ![]() ist eine Lazarus Version, zumindestens für Win32/64/Unix.... |
AW: Laden eines .webp Bildes?
Die Lib selber kann man laut google für verschiedene Plattformen übersetzen. (Es gibt schon fertiges für Linux, Windows and macOS)
![]() Du musst dann nur pro Plattform sehen welche lib du verwedest. Ich glaube nicht das sich jemand antut alles nach Pascal zu übersetzen und es aktuell zu halten. |
AW: Laden eines .webp Bildes?
Als .obj kompiliert, zusammen mit einer Pascal-Header-Unit (ähnlich einer Unit für DLL-Imports),
ließe es sich auch in die EXE einkompilieren linken. siehe z.B. ZLib/Zip, Jpeg, PNG und RegEx im Delphi. |
AW: Laden eines .webp Bildes?
Geht das Multiplattform? Ich habe .lib mal verwendet um V2M Dateien abspielen zu können. Aber nur unter Windows 32. Ich denke nicht das das einfach so für 64Bit / Linux / ARM geht.
|
AW: Laden eines .webp Bildes?
Je nach Platform braucht man eine andere "LIB",
da Diese ja vorkompiliert sind und demnach nur für je eine Platform möglich sind. Also ob man das statisch oder dynamisch linkt (gegen eine DLL/Library-Datei) oder ob man das in die Anwendung einkompilier/linkt (den Code importiert). Teilweise gibt es in einigen OS bereits etwas, was man direkt verwenden kann. z.B. denke ich mal, dass webp im Android enthalten sein wird und man da Funktionen via Java aufrufen könnte. bekanntes Beispiel: im Windows greift man direkt auf die Webcam zu und nutzt irgendeine Barcode-Lib, aber im Android/iOS könnte man auch eine Action der Camera-App ansprechen und sich von ihr den Barcode geben lassen. z.B. hier wird nur für Win32 oder Win64 etwas "in die EXE gelinkt", während bei den anderen Compilern nur gegen eine entsprechende LIB ge-/verlinkt wird (welche vermutlich von Delphi mitgegeben wird). Zitat:
|
AW: Laden eines .webp Bildes?
Mit der
![]() Zumindest bringt es laut beschreibung alles für FMX CrossPlatform mit. |
AW: Laden eines .webp Bildes?
Zitat:
|
AW: Laden eines .webp Bildes?
Zitat:
Zitat:
|
AW: Laden eines .webp Bildes?
Zitat:
|
AW: Laden eines .webp Bildes?
Hmm..
Ich glaube mit nativ Pascal wird das nichts... Aber: Die Tools unter ![]() herunterladen und dann kann per Commandozeilen Tool 'dwebp' das WebP dekodiert werden. ( ![]() Einfach per ShellExec mit den richtigen Parametern füttern und Du hast zu mindestens PNG, TIFF oder BMP. Auch ist es möglich, per stdin das webp als Daten (ohne Zwischenspeicherung als Datei) zu übergeben und ebenso per Stdout wieder als Data zurück zu bekommen. Hinweis: 'Precompiled WebP utilities and library for Linux, Windows and macOS / Precompiled WebP framework for iOS' Somit sollte es auch unter anderen OS funktionieren. |
AW: Laden eines .webp Bildes?
Zitat:
![]() |
AW: Laden eines .webp Bildes?
Also ich würde dass im Zweifel mit
![]() Einfach mal ausprobieren, das ist relatin simpel einzubinden und ist notfalls auf allen Plattformen verfügbar. |
AW: Laden eines .webp Bildes?
Ja, mit Skia funktioniert das gut, das habe ich selbst schon ausprobiert, und es läuft auf allen Plattformen, die Delphi selbst unterstützt.
|
AW: Laden eines .webp Bildes?
Aber dafür könnte man auch einfach die Delphi Klasse TWICImage (Kapselung der Windows Imaging Component) nutzen. Ok, ist nur für Windows, aber damit konvertiere ich massenweise WEBP Bilder.
Delphi-Quellcode:
Hier in meinem Fall liegen die Bilder aber mit der Endung Jpg vor, obwohl es WEBP Bilder sind. Interessanter Weise hat der Webbrowser damit kein Problem. Mein Programm aber weldete ständig JPEG Fehler. Nach Analyse was da los ist, habe ich herausgefunden, dass das nicht JPG's sondern WEBP Bilder mit der Endung jpg sind. Teilsweise liegen die Bilder als JPG voer teilweise als WEBP, daher die Überprüfung in der Konvertierungroutine. Die TWICImage Klasse kann diese Dateien auch problemlos lesen und konvertieren.
FWICImage := TWICImage.Create;
try FWICImage.LoadFromFile(ImagesDir + ImgName + '_tmp.jpg'); DoConvert := FWICImage.ImageFormat <> wifJpeg; if DoConvert then begin FWIcImage.ImageFormat := wifJpeg; FWICImage.SaveToFile(ImagesDir + ImgName); end; finally FWICImage.Free; end; |
AW: Laden eines .webp Bildes?
Der Webbrowser achtet auf den ContentType (image/jpeg), nicht auf den Namen (Dateierweiterung).
Aber meißtens gehen die davon aus, dass eh alle Webdesigner nichtskönnende Schlampen sind, und schaut sich den Dateiinhalt an, also was wirklich da drin ist. TImage/TGraphic hatte früher auch immer nur auf die Dateiendung geachtet. Daher mußte man bei Streams selbst dafür sorgen, dass die richtige Graphics-Klasse geladen ist. ABER jetzt schauen die nach, was wirklich drin ist (zumindestens werden die 4 MagicBytes angesehn) ... drum kann man nun auch Image1.Picture.LoadFromStream nutzen, sowie TDBImage mit unterschiedlichen Bildformaten im BLOB (Stream). TWICImage (Windows Imaging Component ) macht auch sowas (Inhalt ansehn). |
AW: Laden eines .webp Bildes?
Zitat:
Bist Du denn sicher dass WebP da standardmäßig im Windows unterstützt wird (is ja immerhin von Google) ? Vielleicht hast Du irgendwo einen Link zu WICImage, mit der Liste der Formate, ich vermute aber dass man dafür noch irgendeine Extension installieren muss, oder nicht ? |
AW: Laden eines .webp Bildes?
Zitat:
Einfach mal bei ![]() @TE CLI Tools in Resource packen und je nach OS "entpacken" und nutzen wäre praktikabel. WebBrowser (und evtl sogar eine Online-Konvertierung) wäre praktikabel. Api die FMX unterstützt (wie Skia...) oder direkt die WebP-Library einbinden und nutzen. Das Du Libraries die das machen was Du möchtest als Overkill abstempelst, okay, ist ja kein Zwang das zu nutzen, aber ich bin gespannt wie Du dieses Problem löst. |
AW: Laden eines .webp Bildes?
Zitat:
Das hab ich natürlich gemacht und nicht nur bei M$ gesucht, ich finde allerdings keinerlei Hinweise darauf dass Microsoft-WIC sowas wie .WebP beherrscht, deswegen frage ich ja nach. |
AW: Laden eines .webp Bildes?
Also ich habe bei mir nichsts spezielles installieren müssen, damit das WEBP unterstützt wird. Was mit der Windows Fotoanzeige angezeigt werden kann, wird auch von TIWCImage unterstützt, da dieses vermutlich auch diese Windows Imaging Component nutzt. Meiner Meinung nach ist das Bestandteil von mindesten Windows 10. Ob das auch in älteren Windows Versionen läuft, weiss ich nicht, da ich das da noch nie getestet habe.
Gemäss Doku werden da aber Codecs verwendet und bei den Standard Codecs wird das WEBP Format nicht angezeigt. Könnte also sein, das der Codec durch Firefox oder Edge auf dem PC landen oder halt bei Windows 10 wirklich direkt dabei sind. |
AW: Laden eines .webp Bildes?
Grundsätzlich:
![]() ![]() Aber andere Programme können da Teile nachrüsten. Kann gut sein, dass z.B. der Webbrowser oder ein anderes Programm sich dort registriert hat, falls Webp wirklich nicht direkt durch Windows dort drin ist. ![]() Das ist wie beim Windows Scripting Host, wo Windows die Schnittstelle und ein paar Basis-Scriptsprachen bietet und dann Andere das erweitern können. Ihr könnt das ja mal in einem leeren/frischen Windows ausprobieren, bzw. in der sehr rudimentären Windows-Sandbox. ![]() ![]() ![]() ![]() ... |
AW: Laden eines .webp Bildes?
Doofe Antwort, die aber ohne Third-Party und Abhängigkeiten auskommen:
Man könnte natürlich auch die ganzen RFCs und Beispielimplementierungen zu WebP lesen und das selber in Delphi hacken. Aber die dafür nötige Zeit muss auch erstmal bezahlt werden. |
AW: Laden eines .webp Bildes?
Eigentlich muss ich ja nur ein kleines icon laden, welches immer nur in .webp vorliegt (favicon). Dafür skia inkl. DLL etc. ist einfach overkill.
Ich denke, ich werde das icon wohl erst einmal ignorieren, bis ich eine Lösung gefunden habe. Ich bin davon ausgegangen, dass es mittlerweile schon eine einfache Lösung für .webp gibt, aber da lag ich wohl falsch. |
AW: Laden eines .webp Bildes?
TWICImage von WEBP zu ICO/BMP/JPEG/PNG ?
|
AW: Laden eines .webp Bildes?
Zitat:
|
AW: Laden eines .webp Bildes?
In der VCL, da nimmt TPicture.Graphic (TImage.Picture.Graphic) den passenden Typen auf.
z.B. Bitmap, Jpeg und PNG könnte man da drin mit TWICImage laden, aber standardmäßig nimmt die VCL dafür TBitmap, TJPEGImage oder TPNGImage. Im FMX weiß ich jetzt nicht genau, aber da ist das "TBitmap" was Anderes und macht intern auch PNG/JPEG/GIF/TIFF. Müsste man mal im TBitmapCodecManager nachsehn (gefunden, indem ich einfach mal in TBitmap.LoadFromFile geguckt hab), ob der auch Anderes können könnte. |
AW: Laden eines .webp Bildes?
Wie macht das SKIA?
Lt. deren GitHub Projektseite ist da auch webp Unterstützung drin: ![]() |
AW: Laden eines .webp Bildes?
Zitat:
Allerdings steht in der Doku "Skia4Delphi has its own forked version of Skia with the necessary edits to make the library work". Ist also nicht ganz die Original DLL. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz