网站百度地图标记代码,给别人做网站需要增值电信,wordpress 网站名称,响应式网站建设团队全网天下点击上方蓝字关注“汪宇杰博客”导语前一阵我终于完成了博客系统动态生成favicon的功能。众所周知#xff0c;favicon肯定有一个ico格式的图标#xff0c;其余可以用 png manifest 的方式输出。然而这个ICO格式让我小收福报#xff0c;今天就给大家分享一下解决办法。.NET自… 点击上方蓝字关注“汪宇杰博客”导语前一阵我终于完成了博客系统动态生成favicon的功能。众所周知favicon肯定有一个ico格式的图标其余可以用 png manifest 的方式输出。然而这个ICO格式让我小收福报今天就给大家分享一下解决办法。.NET自带API的问题熟悉.NET的小伙伴可能知道System.Drawing.Image上自己就有个Save方法允许传入图片格式包括ICU哦不ICOpublic void Save(string filename, ImageFormat format);public sealed class ImageFormat{ public ImageFormat(Guid guid); public static ImageFormat Bmp { get; } public static ImageFormat Emf { get; } public static ImageFormat Exif { get; } public static ImageFormat Gif { get; } public static ImageFormat Icon { get; } public static ImageFormat Jpeg { get; } public static ImageFormat MemoryBmp { get; } public static ImageFormat Png { get; } public static ImageFormat Tiff { get; } public static ImageFormat Wmf { get; } public Guid Guid { get; } public override bool Equals(object o); public override int GetHashCode(); public override string ToString();}所以当一张图变成Bitmap对象以后可以调用这个方法去保存成各种格式。虽然看上去ICO也是可以的但如果你真信了那么保存出来的ICO实际上还是一个PNG可以用HEX编辑器打开看看文件头部信息// 感觉就像打开一袋清真食品里面发现了猪肉铺一样……复制粘贴能跑就行其实.NET生成ICO的问题十几年前就遗留到了现在。.NET没有自带ICO的编码器因此只能自己去完成编码。而这种事情显然是会996的。好在一个叫 Joshua Flanagan 的大神在2004年就写了一套 .NET 编码 ICO 的库。我稍作修改后也能跑在 .NET Core 3.0 下。前辈的牺牲让今天的我们远离996并且保住了头发。修改后的库文件和我博客的源代码一同放在GitHub里可以去这里复制https://github.com/EdiWang/Moonglade/tree/master/src/Moonglade.Web.FaviconGenerator/IconEncoder使用方法样例private static void GenerateStandardFaviconIco(string originImagePath, string icoFilePath){ var fs new FileStream(originImagePath, FileMode.Open, FileAccess.Read); using (fs) { using var image new Bitmap(fs); var ico Converter.BitmapToIcon(image); using var icoFs new FileStream(icoFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); ico.Save(icoFs); icoFs.Flush(); }}现在生成的ICO文件里已经没有了PNG的信息。当然如果大家仔细研读源代码会发现这个库里有不少hard code的地方比如颜色深度是24位这样的……所以具体场景还需要自己做对应的修改加以完善~