起因: 今天在给一个项目配图标时找了很久只找到一个比较合适的 PNG 图片,于是在网上需找将其转换为 ICO 图标的方法。很简单就找到一种暴力方法 —— 先将 PNG 另存为 BMP,再修改文件格式后缀为 .ico。一切都很顺利,直到我将图标作为资源添加到项目后:image.png 又研究一会后找到原因是这种暴力图标格式不严格符合 ICO 的标准,所以被 VS 给报错了。

后面又发现网上有些工具小网站可以一键将 PNG 图片转为 ICO 图标,而且这样转换后的图标能顺利的添加到项目资源中。

图标顺利添加了,我又突然想到 .NET 有什么库能方便的实现我这个格式转换需求吗?于是我找到了 —— Magick.NET 。

优势

  • 作者维护积极,下载量高
  • 支持平台多,从 .NET Framework 2.0 一直到 .NET Core
  • 背靠大树 ImageMagick
  • 相较 SixLabors.ImageSharp 来说,Magick.NET 商用免费

    简介

    Magick.NET 是 ImageMagick 的 .NET 库,ImageMagick 是一个强大的创建、编辑、合成和转换位图图像工具。

    Use ImageMagick® to create, edit, compose, or convert bitmap images. It can read and write images in a variety of formats (over 200) including PNG, JPEG, GIF, HEIC, TIFF, DPX, EXR, WebP, Postscript, PDF, and SVG. Use ImageMagick to resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.

相关资源:

支持平台:

  • .NET Framework (2.0 and higher)
  • .NET Core (.NETStandard 1.3 and higher on Windows, Linux and macOS)

Magick.NET 处理图像 - 图2

初步上手

下面就展示一下如何用 Magick.NET 实现我图标转换的需求:

  1. static void Main(string[] args)
  2. {
  3. using (var image = new MagickImage("test.png"))
  4. {
  5. image.Write("test_64px.ico");
  6. image.Resize(32, 32);
  7. image.Write("test_32px.ico");
  8. }
  9. Console.WriteLine("Conversion has been completed.");
  10. }

简单到不可思议,甚至我还专门又生成了一个 32px 的图标,代码也才 4 行。

效果大致就是下面这样:

PNG 64px 图标 32px 图标
test.png image.png image.png