日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

怎么将SVG转成PNG(.NET工具包编写)

發布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么将SVG转成PNG(.NET工具包编写) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


一天,作者在深圳灣吹風時突然想到自己還有 20 多位粉絲,所以決定每周至少要水一篇文章。

眾所周知,一篇文章要有封面,正痛苦時,.NET 官方網站更新了一大波質量上乘的插圖;高興之余,發覺平臺不支持 SVG 圖片,所以有了這篇文章。

不過在這里,我勸!各位年輕人,耗自為汁,不要再耍這種聰明,小聰明,啊!互聯網還是要講版權,不要搞窩里斗。

介紹


首先進行簡單介紹,若已有了解可跳過該小節。

SVG 是一種基于 XML 語法的圖像格式,全稱是可縮放矢量圖(Scalable Vector Graphics)。其他圖像格式都是基于像素處理的,SVG 則是屬于對圖像的形狀描述,所以它本質上是文本文件,體積較小,且不管放大多少倍都不會失真。

阮一峰的網絡日志《SVG 圖像入門教程》http://www.ruanyifeng.com/blog/2018/08/svg.html

PNG 是一種采用從 LZ77 派生的無損數據壓縮算法的位圖格式,其壓縮比高,生成文件體積小。

百度百科《PNG》https://baike.baidu.com/item/png

稍微總結,SVG 文本體積小、縮放不失真,PNG無損、壓縮比高、背景透明,需要詳細了解請打開上面的鏈接進行學習。

SVG.NET


微軟開源網站上有一個 SVG 項目(svg.codeplex.com),但是因為年代久遠長時間沒有維護,并且沒有發布 Nuget 包;后來有組織將代碼維護到了 GitHub(github.com/vvvv/SVG),沿用了微軟的協議(MS-PL),并且發布了 Nuget 包,使用非常簡單:

PM> Install-Package Svg var?svg?=?SvgDocument.Open("dotnet.svg"); Bitmap?image?=?svg.Draw(); image.Save("dotnet.png");

上述代碼中,調用 Draw 方法繪制圖片時沒有設置寬高,所以會使用 SVG 文檔中默認的寬高,這樣轉換出來的圖片分辨率可能會略低,可以按照原有比例進行放大:

var svg?=?SvgDocument.Open("dotnet.svg");float?width?=?svg.ViewBox.Width?*?4; float?height?=?svg.ViewBox.Height?*?4;Bitmap?image?=?svg.Draw((int)width,?(int)height); image.Save("dotnet.png");

順便提一下,該包以及其依賴包會涉及到多種開源協議:MIT、MS-PL、LGPL;主要說明一下 MS-PL 和 LGPL,都可以作為類庫引用到商業軟件中。

到此,SVG 轉換為 PNG 已經完成,如果需要繼續了解 .NET 工具包制作請繼續往下。

工具包制作


.NET Core 工具是一種特殊的 NuGet 包,其中包含控制臺應用程序。

微軟官方文檔《管理工具》https://aka.ms/global-tools

即可以通過命令 dotnet tool 進行工具的安裝/卸載/管理,詳情請閱讀官方教程。

首先,我們選擇一個包來簡化程序參數解析等處理過程:

PM> Install-Package McMaster.Extensions.CommandLineUtils

該程序也是之前一直在微軟內部作為共享代碼使用,然后作為 extensions 產品的一部分發布成了 Nuget 包,但是后來放棄并邀請社區維護;社區接力后,添加了很多諸如依賴注入等有趣的功能,現微軟推薦大家使用該社區維護版本。深度使用請閱讀其 GitHub 上的 Readme。

首先我們定義需要接收的數據,SVG 目錄、PNG 目錄、放大倍數:

internal interface IOptions {public?string?SvgDir?{?get;?set;?}public?string?PngDir?{?get;?set;?}public int Enlarge { get; set; } }

然后編寫 Command 類,CommandLineUtils 會根據該類生成幫助文檔,以及接收并處理用戶輸入:

internal class Command : IOptions {[Option(Description = "SVG 圖片目錄")]public string SvgDir { get; set; }[Option(Description = "PNG 圖片目錄")]public string PngDir { get; set; }[Option(Description = "放大倍數")]public int Enlarge { get; set; }public void OnExecute(){Handler handler = new(){Options = this,};handler.Handle();} }

最后在 Program.cs 中將 CommandLineUtils 對接到程序入口:

using?McMaster.Extensions.CommandLineUtils;CommandLineApplication.Execute<Command>(args);

至此,該工具的主要流程已完成,但是要真正運行還需要編寫 Command 中調用的 Handler 類,該類主要邏輯是將 SVG 轉為 PNG,上述章節已有講解;其整個類還有其他文件操作、異常處理代碼,全部列出會占用較多篇幅,不想動手的同學可以直接點擊文章尾部的 原文鏈接 到 GitHub 下載源代碼。

最后,制作工具包還需要在項目文件中配置:

<PackAsTool>true</PackAsTool> <ToolCommandName>svg2png</ToolCommandName>

將編譯生成的 Nuget 包發布到 nuget.org 中,過程略。

使用?svg2png


安裝 svg2png

PS> dotnet tool install -g svg2png

查看幫助

PS> svg2png -h Usage: svg2png [options]Options:-s|--svg-dir <SVG_DIR> SVG 圖片目錄-p|--png-dir <PNG_DIR> PNG 圖片目錄-e|--enlarge <ENLARGE> 放大倍數-?|-h|--help Show help information

轉換

PS> svg2png -s E:\svg2png -p E:\output -e 4

END

祝編碼愉快。

總結

以上是生活随笔為你收集整理的怎么将SVG转成PNG(.NET工具包编写)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。