From 955eef83b0181b57f367f15fefccc63bddf3da86 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 19 Apr 2021 23:47:29 +0200 Subject: [PATCH] LibWeb: Add basic support for HTMLCanvasElement.toDataURL() :^) This allows you to serialize a element's bitmap into a data: URI. Pretty neat! :^) --- Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp | 12 ++++++++++++ Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.h | 2 ++ Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.idl | 2 ++ 3 files changed, 16 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp index fed960276e0..b1e505f25b0 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp @@ -24,8 +24,10 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include +#include #include #include #include @@ -102,4 +104,14 @@ bool HTMLCanvasElement::create_bitmap() return m_bitmap; } +String HTMLCanvasElement::to_data_url(const String& type, [[maybe_unused]] Optional quality) const +{ + if (!m_bitmap) + return {}; + if (type != "image/png") + return {}; + auto encoded_bitmap = Gfx::PNGWriter::encode(*m_bitmap); + return URL::create_with_data(type, encode_base64(encoded_bitmap), true).to_string(); +} + } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.h b/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.h index 43df33f7107..257500220fb 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.h @@ -48,6 +48,8 @@ public: unsigned width() const; unsigned height() const; + String to_data_url(const String& type, Optional quality) const; + private: virtual RefPtr create_layout_node() override; diff --git a/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.idl index 5a04895fb46..6fc0a0ba4a8 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLCanvasElement.idl @@ -4,4 +4,6 @@ interface HTMLCanvasElement : HTMLElement { readonly attribute unsigned long width; readonly attribute unsigned long height; + USVString toDataURL(optional DOMString type = "image/png", optional double quality); + };