
「安全」對線上 SVG 轉 JPG 轉換器而言的真正含意
當線上 SVG 轉 JPG 轉換器在瀏覽器中以本機方式處理每個檔案,從不上傳 SVG 或產生的 JPG 到伺服器,並拒絕那些可能將向量檔案變成安全性風險的標記(腳本、事件處理常式、內嵌圖片、外部物件、外部資源)時,它就是安全的。SVG 轉 JPG 轉換器遵循上述所有三項規則:檔案讀取、嚴格的 SVG 稽核、canvas 繪製與 JPEG 編碼全部都在當前分頁中完成,且所支援的 SVG 子集刻意小於完整瀏覽器渲染器所能接受的範圍。由於轉換器刻意接受較窄的介面,即使樣式 block 是無害的,設計軟體匯出的普通 SVG 仍可能會被拒絕,而且當遇到不支援的內容時,工具絕不會嘗試「清理後繼續」。這種組合——本機處理、嚴格稽核,以及明確拒絕而非靜默清理——正是讓以瀏覽器為基礎的轉換器在處理受信任的美術作品(如標誌、圖示和簡單圖表)時值得信賴的原因。
三項具體特性區別了安全轉換器與危險轉換器:
| 安全性特性 | 安全轉換器的做法 | 為何對 SVG 很重要 |
|---|---|---|
| 處理位置 | 在瀏覽器分頁內讀取、解碼、繪製和匯出 | 將檔案從通常遭受攻擊的上傳與儲存管道中移除 |
| 標記稽核 | 在解碼前拒絕腳本、事件處理常式、內嵌圖片、foreignObject 及外部資源 | SVG 可包含看似靜態美術但實際上是作用中或連線網路的功能 |
| 失敗行為 | 當超過限制時停止並回報不支援的介面 | 避免產生靜默的不完整轉換、截斷讀取,或被猜測的輸出尺寸而產生錯誤的檔案 |
上述每項特性都可從其建置方式驗證,而非來自行銷承諾。接下來的章節將逐步說明轉換器在瀏覽器中實際執行的作業、SVG 稽核檢查的內容,以及如何安全地執行轉換。
轉換器如何將檔案保留在你的裝置上
所有作業都在當前的瀏覽器分頁中進行。隱藏的檔案輸入將所選的 .svg 檔案以文字形式讀取,針對該文字執行 SVG 稽核,瀏覽器解碼接受的 SVG,轉換器以選擇的背景色彩填滿 canvas,在宣告的尺寸下繪製解碼後的 SVG,依據 WHATWG canvas 規範呼叫 canvas.toBlob('image/jpeg', quality),並在提供下載前驗證回傳的 Blob 確實為 JPEG。過程中沒有向 Lizely 伺服器發出的 fetch 呼叫、轉換內無遙測,也沒有對 SVG 或 JPG 的物件儲存寫入。SVG 文字、渲染後的像素、原始檔案名以及最終 JPG 皆保留在本機裝置。
轉換器管理自身的暫存物件 URL,避免過期的預覽被誤認為當前的轉換結果。選擇另一個檔案會撤銷舊的來源與結果 URL;變更品質或背景會撤銷舊的 JPG 物件 URL;重新產生會取代結果 URL;離開頁面則會釋放所有剩餘的 URL。請求與掛載狀態的保護機制可防止緩慢的解碼或 canvas 匯出覆蓋較新的設定。隱藏輸入在每次選擇後會重設,因此同一檔案可以被再次選取。這些生命週期規則可避免大型本機儲體被保留超過所需時間,並防止在設定變更後仍顯示前一次的轉換結果。
確認「不上傳」聲明非常簡單。開啟頁面的開發者工具網路分頁並執行完整的轉換:只會出現頁面本身的文件、腳本和樣式。在轉換過程中沒有任何包含檔案的 POST 被送出,且沒有任何帶有 SVG 內容的請求送往 Lizely 端點。匯出步驟的行為也相同——JPEG 下載是透過瀏覽器本身的 blob URL 機制產生,而非經由伺服器往返,因此檔案會直接從本機記憶體進入你的下載資料夾。
解碼前的 SVG 安全性稽核
SVG 可包含作用中或連線網路的功能,因此轉換器刻意接受比完整瀏覽器 SVG 渲染器更小的子集。稽核會執行兩次,分別對原始文字與解析後的 DOM 進行檢查,因此巧妙的編碼無法同時規避這兩道檢查。根據 MDN 關於 SVG 作為影像的指南,瀏覽器本身在透過 image 元素引用 SVG 時會限制其介面;本工具在任何解碼發生之前套用該概念的更嚴格版本。
在影像解碼前,共用的稽核邏輯會拒絕:
- script、foreignObject、iframe、object、embed、image、audio、video 及 style 元素,這些可能執行程式碼、內嵌遠端文件或擷取外部媒體。
- 任何命名空間中的事件處理常式屬性,例如 onclick、onload 及 onmouseover。
- 內嵌樣式屬性、xml:base、文件類型宣告、實體宣告、非 XML 處理指示,以及任何非本機片段參照(如 #gradient)的 href 或 xlink:href。
- 指向非本機片段的CSS url() 參考,以阻擋內嵌圖片、網路字型及外部樣式表。
第二道以 DOM 為基礎的檢查會驗證格式正確的 XML、SVG 命名空間中的 SVG 根元素、上述被禁止的元素,以及文字層檢查未攔截到的任何不安全屬性。若任一檢查發現問題,工具會停止並說明不支援的介面,讓使用者能檢查來源。轉換器不會清理不安全的內容後繼續,這對一個職責是將受信任的美術作品轉成 JPEG、而非清理惡意檔案的工具而言,是正確的權衡。
嚴格的樣式限制意味著部分由設計軟體匯出的普通 SVG 即使其樣式 block 是無害的,仍會被拒絕。建議的修正方式是請設計應用程式將外觀展開為呈現屬性與路徑、移除內嵌圖片、移除腳本與事件處理常式,並將漸層、遮罩、剪輯與濾鏡封裝於同一個 SVG 內,以片段 ID 標示。這會產生一個自包含的檔案,通過稽核並在轉換器中呈現相同結果。
如何在瀏覽器中安全地將 SVG 轉成 JPG
對大多數讀者而言,實際的問題很簡單:我現在該如何執行一項安全的轉換?下列三個步驟反映工具內部的運作,且每個步驟背後都有明確的安全理由。
- 選擇一個自包含且不大於 5 MiB 的 .svg 檔案。轉換器會以文字形式讀取該檔案並對該文字執行嚴格的稽核,因此檔案必須是純 SVG 標記,不能含有內嵌的點陣圖、網路字型或外部樣式表。超過 5 MiB 的檔案會以錯誤訊息拒絕;它們絕不會被部分讀取或截斷。
- 選擇不透明背景色彩與介於 0.60 至 1.00 之間的 JPEG 品質。JPEG 沒有 alpha 通道,因此 canvas 會在繪製 SVG 之前以所選的純色填滿。白色為預設值。品質控制的是 JPEG 壓縮,而非輸出尺寸——較高的值保留更多細節並產生較大的檔案,較低的值則可能在銳利的向量邊緣和小字周圍產生可見的失真。變更任一設定都會清除先前的結果。
- 轉換 SVG、比較 JPG 預覽與來源,並下載新的點陣檔案。瀏覽器會解碼接受的 SVG,在 canvas 上以宣告的尺寸繪製,匯出為 .jpg,並提供下載連結。若解碼或 canvas 匯出失敗,先前的 JPG 會被移除,而非保留可見。研究製的轉換是點陣圖,無法保留可縮放的路徑或可編輯的 SVG 物件,因此務必將預覽與權威的向量來源進行比較。
若轉換器拒絕一個檔案,拒絕訊息通常會指出觸發稽核的特定元素或屬性。常見的原因包括內嵌的 <style> block、內嵌的點陣圖,或指向外部資源的 href。從設計工具重新匯出 SVG 並套用上述變更,是最乾淨的修正方式。如需更完整的逐步說明,比較瀏覽器路徑與桌面軟體,請參閱 如何在 Inkscape 或瀏覽器中將 SVG 轉成 JPG。
讓工具停止而非猜測的限制
安全的轉換器也是當輸入不符合時能明確失敗的轉換器。SVG 轉 JPG 轉換器強制執行下列限制,並在超出時回傳錯誤,而非靜默地調整大小或部分讀取:
| 限制 | 數值 | 超出時的行為 |
|---|---|---|
| 輸入檔案大小 | 最大 5 MiB | 以錯誤訊息拒絕;絕不靜默調整大小、部分讀取或截斷 |
| 輸出邊長 | 每邊最大 8,192 像素 | 以錯誤訊息拒絕 |
| 總輸出像素 | 最大 32,000,000 像素 | 以錯誤訊息拒絕 |
| 尺寸來源 | 明確的根寬度與高度(像素),或正值 viewBox 寬度與高度 | 缺少、百分比、實體單位或無效的值會被拒絕而非猜測;分數尺寸會進位為整數像素 |
背景永遠是不透明的。白色為預設值,色彩控制可提供任何其他純色;不過透明度無法保留在結果中,因為 JPEG 無 alpha 通道。品質控制的是 JPEG 壓縮,並非控制 canvas 大小。較高的品質通常保留更多細節並產生較大的檔案,而較低的品質則可能在銳利的向量邊緣、小字、漸層和高對比邊界周圍產生可見的失真。輸出為點陣影像,因此向量、元資料、內嵌字型、動畫、互動功能、無障礙結構、連結、圖層以及原始編輯紀錄皆不會保留在 JPG 中。
通過文字稽核並不保證每個 SVG 功能在所有瀏覽器中都呈現一致結果。字型可用性、濾鏡實作、色彩管理、遮罩、剪輯及 SVG 版本支援皆可能有所不同。當前的瀏覽器必須成功解析並解碼該檔案,才能進行 canvas 繪製;格式錯誤的檔案或不支援的功能會產生解碼錯誤,並清除任何先前的下載。canvas.toBlob 若未回傳 blob 或拋出例外,也會被回報,不會被當作過期的成功結果。
\當瀏覽器工具不是正確選擇時
對於一般網頁圖形、簡單圖表、由本機路徑製成的標誌、自包含的圖示,以及其他符合文件記載子集的可信賴素材,轉換器就是合適的工具:可在本機執行、注重隱私,且可稽核。對於具有敵意威脅的 SVG、封存用途、印刷輸出、色彩精準要求,或處理不可信內容的工作流程,請使用有維護的桌面轉換工具,或具備明確 SVG 安全政策且與外界隔離的伺服器管線,並在散布前檢查輸出結果。
瀏覽器型轉換器同樣也不是通用的清理工具。它會拒絕那些讓 SVG 帶有風險的標記,並選擇停止而非清理後繼續,但這並不代表它適合用來分類可疑檔案。請以對待在沙箱中開啟不可信檔案的文字編輯器同樣的方式來看待它:適合日常使用,但無法取代專用的安全性工具。如果您還需要從同類型的自包含 SVG 匯出透明的 PNG,SVG 轉 PNG 轉換器遵循相同的本機處理模式。
對於希望廣泛了解線上圖片轉換器安全性的讀者,相關指南線上使用 SVG 轉 PNG 轉換器是否安全針對不同的輸出格式涵蓋了相同的隱私模式,而 GIF 縮放器的隱私檢查則將同樣的標準套用於動畫檔案。這些工具的簡短結論都一致:不上傳、無伺服器端保留,且當輸入不符合支援的子集時明確拒絕處理。