Web Component 轉圖片

一、HTML 轉圖片

目前,常見的開源的能夠將 HTML 轉換為圖片有html2canvasdom-to-image,大部分場景下,這些開源庫都能很友好的處理。

HTML 轉圖片的實現原理,通常分為兩種:svgcanvas。今天主要討論下 svg 的場景,它的處理流程一般為:

cloneNode
serializeToString
站點HTML
拷貝出的DOM樹
foreignObject
XMLSerializer
new Image
canvas
Blob

二、svg 模式存在的問題

普通的 DOM 節點這么處理,一般沒啥大問題。唯獨遇見 Web Component 時,XMLSerializer 的處理過程會造成 ShadowRoot 解析失敗。

表現的行為就是,繪制出的圖片中,Web Component 所在的位置是一片空白。

三、解決方案設計

XMLSerializer.serializeToString 對 Web Component:

  1. 如果 Web Component 的關鍵內容位于其 Shadow DOM 中,那么使用 XMLSerializer 序列化后,這些內容將不會包含在生成的 XML 字符串中,導致信息丟失
  2. 如果 Web Component 的樣式信息位于 Shadow DOM 中,使用 XMLSerializer 序列化后,樣式信息也將丟失,導致外部無法正確地應用樣式

定位到問題后,則大致的處理方案為:

  1. 將 Web Component 解析為普通的 DOM 節點,將 ShadowRoot 下的節點拷貝至 DOM 節點中
  2. 處理 ShadowRoot 的 style 節點,防止樣式造成全局污染

四、方案實現

npm - @gripeless/pico 是一個基于 svg 實現的、輕量級的 HTML 轉圖片的庫,大小 99.3 KB

@swl/clone-node-deep 是一個兼容 Web Component 拷貝的開源庫,大小為 10.6KB

二者相配合,即可實現兼容 Web Component 的圖片繪制場景。

五、引用

  • github - pico 源碼
  • github - @swl/clone-node-deep 源碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719124.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flutter中使用Dio庫封裝網絡請求服務工具類

在Flutter應用程序中,進行網絡請求是非常常見的任務。Dio是一個強大的、易于使用的Dart包,用于處理HTTP請求。本篇博客將介紹如何封裝Dio庫,以及如何在Flutter應用中進行網絡請求并取消請求。 什么是Dio? Dio是一個基于Dart語言…

解決android studio build Output中文亂碼

1.效果如下所示: 代碼運行報錯的時候,Build Output報的錯誤日志中中文部分出現亂碼,導致看不到到底報的什么錯。 2.解決辦法如下: 點擊Android studio開發工具欄的Help-Edit Custom VM Options....,Android studio會…

springboot微服務中集成了mybatis的服務引入了其他集成了mybatis的服務此時調用引入的服務中的某個mapper接口時報沒有注入

在啟動類上加引入的服務中的mapper路徑,在配置文件中將mapperLocations的值改為classpath*:mapper/.xml: MapperScan(basePackages {"com.ruoyi..mapper"}) 和 mapperLocations: classpath*:mapper/*.xml 是 MyBatis 在 Spring Boot 中配置 M…

AutoGPT實現原理

AutoGPT是一種利用GPT-4模型的自動化任務處理系統,其主要特點包括任務分配、多模型協作、互聯網訪問和文件讀寫能力以及上下文聯動記憶性。其核心思想是通過零樣本學習(Zero Shot Learning)讓GPT-4理解人類設定的角色和目標,并通過…

端口號被占用時的解決辦法

1、查看端口占用的進程號 netstat -ano |findstr 8080 2、 找到占用端口的程序 tasklist |findstr 2264 3、kill端口 taskkill /pid 2264 /f

文物預防性保護方案整體結構及軟件介紹

?文物預防性保護監測與調控系統整體是構架在商業級技術平臺上的多層綜合性應用,采用分布式部署的模塊化設計,以智能監測終端及高精傳感器為核心的感知系統。系統通過以下的層次結構協同工作完成全面的監控與調控功能: 1)系統依靠文物監測調控模型作為運行核心&…

基于springboot+vue的校園愛心捐贈互助管理系統(源碼+論文)

目錄 前言 一、功能設計 二、功能實現 三、庫表設計 四、論文 前言 隨著經濟水平和生活水平的提高在校大學生在校需要處理的物品也在不斷增加,同時校園內還存在很多貧困生,可以通過線上平臺實現資源的整合和二次利用,通過線上平臺求助信…

護眼燈有效果嗎怎么樣?推薦五款值得入手的護眼臺燈

隨著護眼臺燈被越來越多的人解鎖新的護眼攻略,它的產品熱度也越來越高,而且光線柔和,是一款非常不錯的照明用具。但是也有不少用戶反饋買到的護眼臺燈效果不好,有時候還會覺得刺眼,有些不合格的臺燈使用時間一久還會散…

動態IP代理技術在網絡爬蟲中的實際使用

目錄 一、動態IP代理技術概述 二、動態IP代理技術的優勢 三、動態IP代理技術的實際應用 四、注意事項 五、案例分析 六、結論 隨著互聯網的迅猛發展,網絡爬蟲成為了獲取信息、分析數據的重要工具。然而,在進行大規模爬取時,爬蟲常常面臨…

gin gorm學習筆記

代碼倉庫 https://gitee.com/zhupeng911/go-advanced.git https://gitee.com/zhupeng911/go-project.git 1. gin介紹 Gin 是使用純 Golang 語言實現的 HTTP Web框架,Gin接口設計簡潔,提供類似Martini的API,性能極高,現在被廣泛使用…

《C語言缺陷和陷阱》-筆記

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么?二、使用步驟 1.引入庫2.讀入數據總結 前言 在這一節中,我們將探索對記號的意義的普遍的誤解以及記號和組成它們的字…

指針習題二

使用函數指針實現轉移表 #include <stdio.h> int add(int a, int b) {return a b; } int sub(int a, int b) {return a - b; } int mul(int a, int b) {return a * b; } int div(int a, int b) {return a / b; } int main() {int x, y;int input 1;int ret 0;int(*p[…

學習python時一些筆記

1、winr 命令提示符的快捷鍵 輸入cmd進入終端 2、在終端運行桌面上的python文件 cd desktop(桌面) cd是進入該文件夾的意思。 cd .. 回到上一級 運行python時一定要找到文件的所在地 輸入python進入&#xff0c;exit()退出%s字符串占位符%d數字占位符%f浮點數占位符input輸…

Linux速覽(1)——基礎指令篇

在上一章對Linux有了一些基礎了解之后&#xff0c;本章我們來學習一下Linux系統下一些基本操作的常用的基礎指令。 目錄 1. ls 指令 2. pwd&&whoami命令 3. cd 指令 4. touch指令 5.mkdir指令&#xff08;重要&#xff09;&#xff1a; 6.rmdir指令 && …

vue面試題:如何保存頁面的當前的狀態?

如何保存頁面的當前的狀態&#xff1f; 既然是要保持頁面的狀態&#xff08;其實也就是組件的狀態&#xff09;&#xff0c;那么會出現以下兩種情況&#xff1a;組件會被卸載&#xff1a;&#xff08;1&#xff09;將狀態存儲在LocalStorage / SessionStorage優點&#xff1a;缺…

帶大家做一個,易上手的水煮牛肉

今天帶大家做川菜系中的 水煮牛肉 這個菜是比較費辣椒的 制作成本相對一般菜來說 會高一些 一塊牛肉 泡水劃冰 從超時買的干腐竹 切成小片 溫水浸泡五分鐘 泡軟它 然后撈出來 去干水分 牛肉切片 盡量切薄一點 三瓣左右蒜 一塊生姜 去皮切末 牛肉中下入 一個雞蛋 小半勺…

python實現視頻或音頻轉文本

python實現視頻或音頻轉文本 當然可以,以下是您的Python語音視頻轉文本代碼的描述: 內容概要: 這段Python代碼利用強大的語音識別庫,能夠自動將本地存儲的語音視頻文件轉換成文本。它通過分析音頻軌道中的語音數據,識別并轉錄為可編輯和可搜索的文本格式。 適用人群: …

裝修必看干貨|入戶玄關設計進門就是客廳應該怎么設計?福州中宅裝飾,福州裝修

入戶玄關設計在進門就是客廳的情況下&#xff0c;想要擁有單獨的玄關空間&#xff0c;以下是五點設計建議&#xff1a; ①隔斷屏風 使用隔斷屏風是傳統而常見的一種空間分割方法。可以選用木制、金屬或玻璃等材質的屏風&#xff0c;根據需要進行靈活搭配和定制。 屏風的款式和…

Python爬蟲——Urllib庫-1

這幾天都在為了藍橋杯做準備&#xff0c;一直在刷算法題&#xff0c;確實刷算法題的過程是及其的枯燥且枯燥的。于是我還是決定給自己找點成就感出來&#xff0c;那么Python的爬蟲就這樣開始學習了。 注&#xff1a;文章源于觀看尚硅谷爬蟲視頻后筆記 目錄 Urllib庫 基本使…

【C++】字符串 1478 - 出現次數最多的小寫字母 1475 - 字符串對比 1098 - 判斷是否構成回文 1102 - 字符串中的空格移位

文章目錄 問題一&#xff1a;1478 - 出現次數最多的小寫字母問題二&#xff1a;1475 - 字符串對比問題三&#xff1a;1098 - 判斷是否構成回文問題四&#xff1a;1102 - 字符串中的空格移位五、感謝 問題一&#xff1a;1478 - 出現次數最多的小寫字母 類型&#xff1a;字符串 …