using System.IO.FileFormats; using static System.IO.FileFormats.Internals.ImageFileFormat; namespace System.IO.FileFormats { /// /// 图片格式 /// 添加新格式操作说明: /// 在 添加新的格式 /// 在 添加新的 case /// 在 添加新的 case /// 在 添加新的 case /// public enum ImageFormat : byte { // ReSharper disable once InconsistentNaming // 此枚举中禁止出现值为0的 /// /// BMP取自位图Bitmap的缩写,也称为DIB(与设备无关的位图),是一种与显示器无关的位图数字图像文件格式。常见于 Microsoft Windows 和 OS/2 操作系统,Windows GDI API内部使用的DIB数据结构与 BMP 文件格式几乎相同。 /// https://en.wikipedia.org/wiki/BMP_file_format /// BMP = 2, /// /// 图像互换格式(GIF,Graphics Interchange Format)是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像。它实际上是一种压缩文档,采用LZW压缩算法进行编码,有效地减少了图像文件在网络上传输的时间。它是目前万维网广泛应用的网络传输图像格式之一。 /// https://en.wikipedia.org/wiki/GIF /// https://baike.sogou.com/v2844.htm /// GIF, /// /// ICO文件格式是Microsoft Windows中计算机图标的图像文件格式。 ICO文件包含多个尺寸和颜色深度的一个或多个小图像,以便可以适当地缩放它们。 在Windows中,向用户,桌面,“开始”菜单或Windows资源管理器中显示图标的所有可执行文件都必须带有ICO格式的图标。 /// https://en.wikipedia.org/wiki/ICO_(file_format) /// https://baike.sogou.com/v64848120.htm /// ICO, /// /// JPG/JPEG /// 在计算机中,JPEG(发音为jay-peg, IPA:[ˈdʒeɪpɛg])是一种针对照片视频而广泛使用的有损压缩标准方法。这个名称代表Joint Photographic Experts Group(联合图像专家小组)。此团队创立于1986年,1992年发布了JPEG的标准而在1994年获得了ISO 10918-1的认定。JPEG与视频音频压缩标准的MPEG(Moving Picture Experts Group)很容易混淆,但两者是不同的组织及标准。 /// https://en.wikipedia.org/wiki/JPEG /// https://baike.sogou.com/v241266.htm /// JPEG, /// /// 便携式网络图形(Portable Network Graphics,PNG)是一种无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。PNG的开发目标是改善并取代GIF作为适合网络传输的格式而不需专利许可,所以被广泛应用于互联网及其他方面上。 /// https://en.wikipedia.org/wiki/Portable_Network_Graphics /// https://baike.sogou.com/v44717.htm /// PNG, /// /// WebP(发音weppy),是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,派生自视频编码格式VP8,被认为是WebM多媒体格式的姊妹项目,是由Google在购买On2 Technologies后发展出来,以BSD授权条款发布。 /// https://zh.wikipedia.org/wiki/WebP /// https://baike.sogou.com/v10183483.htm /// https://developers.google.com/speed/webp/ /// https://developers.google.cn/speed/webp/ /// WebP, #region HEIF/HEIC /// /// HEIF/HEIC /// 高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12(ISO/IEC 23008-12)中定义。 /// https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format /// https://baike.baidu.com/item/HEIC/10444257 /// HEIF, /// HEIFSequence, /// HEIC, /// HEICSequence, #endregion } } namespace System { /// /// Enum 扩展 /// public static partial class ImageFormatEnumExtensions { /// /// 获取扩展名 /// /// /// /// public static string GetExtension(this ImageFormat imageFormat) { return imageFormat switch { ImageFormat.BMP => BMP.DefaultFileExtension, ImageFormat.GIF => GIF.DefaultFileExtension, ImageFormat.ICO => ICO.DefaultFileExtension, ImageFormat.JPEG => JPG.DefaultFileExtension, ImageFormat.PNG => PNG.DefaultFileExtension, ImageFormat.WebP => WebP.DefaultFileExtension, ImageFormat.HEIF => HEIF_HEIC.HEIF.DefaultFileExtension, ImageFormat.HEIFSequence => HEIF_HEIC.HEIF.DefaultFileExtension, ImageFormat.HEIC => HEIF_HEIC.HEIC.DefaultFileExtension, ImageFormat.HEICSequence => HEIF_HEIC.HEIC.DefaultFileExtension, _ => throw new ArgumentOutOfRangeException(nameof(imageFormat), imageFormat, null), }; } /// /// 获取MIME /// /// /// /// public static string GetMIME(this ImageFormat imageFormat) { return imageFormat switch { ImageFormat.BMP => BMP.DefaultMIME, ImageFormat.GIF => GIF.DefaultMIME, ImageFormat.ICO => ICO.DefaultMIME, ImageFormat.JPEG => JPG.DefaultMIME, ImageFormat.PNG => PNG.DefaultMIME, ImageFormat.WebP => WebP.DefaultMIME, ImageFormat.HEIF => HEIF_HEIC.HEIF.DefaultMIME, ImageFormat.HEIFSequence => HEIF_HEIC.HEIFSequence.DefaultMIME, ImageFormat.HEIC => HEIF_HEIC.HEIC.DefaultMIME, ImageFormat.HEICSequence => HEIF_HEIC.HEICSequence.DefaultMIME, _ => throw new ArgumentOutOfRangeException(nameof(imageFormat), imageFormat, null), }; } /// /// 获取 MagicNumber /// 注意!仅允许以下返回类型:byte[] / byte?[] byte[][] / byte?[][] /// /// /// /// internal static object GetMagicNumber(this ImageFormat imageFormat) { return imageFormat switch { ImageFormat.BMP => BMP.MagicNumber, ImageFormat.GIF => GIF.MagicNumber, ImageFormat.ICO => ICO.MagicNumber, ImageFormat.JPEG => JPG.MagicNumber, ImageFormat.PNG => PNG.MagicNumber, ImageFormat.WebP => WebP.MagicNumber, ImageFormat.HEIF => HEIF_HEIC.HEIF.MagicNumber, ImageFormat.HEIFSequence => HEIF_HEIC.HEIFSequence.MagicNumber, ImageFormat.HEIC => HEIF_HEIC.HEIC.MagicNumber, ImageFormat.HEICSequence => HEIF_HEIC.HEICSequence.MagicNumber, _ => throw new ArgumentOutOfRangeException(nameof(imageFormat), imageFormat, null), }; } } }