[英]Trim SVG whitespace in .NET
我正在嘗試以編程方式將 SVG 文件轉換為 PNG 文件。 SVG 的邊緣有一些我想去掉的空白。 我想在轉換為 PNG 之前修剪空白,因為沒有空白的 SVG 大小將決定我需要縮放 SVG 的大小。
我發現的大多數幫助文檔都基於HTML/JavaScript 解決方案,但我需要在 .NET 中執行此操作。
這是我在幾個網站上看到的針對 HTML/JS 的普遍推薦方法:
var svg = document.getElementsByTagName("svg")[0];
var bbox = svg.getBBox();
var viewBox = [bbox.x, bbox.y, bbox.width, bbox.height].join(" ");
svg.setAttribute("viewBox", viewBox);
prompt("Copy to clipboard: Ctrl+C, Enter", svg.outerHTML);
SVG.NET似乎是領先的 .NET SVG 處理包,但文檔非常稀少。
看起來這個庫有 API 來支持推薦的 JavaScript 方法,但是當我更新ViewBox
並保存時,它看起來就像原始圖像一樣。 這是我的 F# 嘗試:
let svg = SvgDocument.Open("original.svg")
let bmp1 = svg.Draw()
bmp1.Save("original.png", ImageFormat.Png)
let bounds = svg.Bounds
svg.ViewBox <- SvgViewBox(bounds.Left, bounds.Top, bounds.Width, bounds.Height)
let bmp2 = svg.Draw()
bmp2.Save("trimmed.png", ImageFormat.Png)
如果我設置斷點並檢查Bounds
的值,它似乎確實代表了內容邊界框(不包括空格)。
我發現的另一種選擇是GrapeCity.Documents.Imaging 。 這不太受歡迎,但有更好的文檔。 但是,它似乎沒有公開我能找到的 SVG 邊界框的任何 API。
如何在 .NET 中修剪 SVG?
哈克蠻力解決方法
通用算法:
這是一個包含所有細節的GitHub Gist 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.