zoukankan      html  css  js  c++  java
  • C#通过文件头判断图像格式(摘录)

    因为有个地方判断图像的格式,原先是通过Image类来判断,觉得不是很好,上网查找了通过文件头2个字节来判断,可原文不是很好,有些地方不对,现把修改后的代码上传以供大家复制。

      /// <summary>
        /// 实现通过文件头2个字节判断图片的格式。
        /// </summary>
        public class ImageTypeCheck
        {
            static ImageTypeCheck()
            {
                _imageTag = InitImageTag();
            }
            private static SortedDictionary<int, ImageType> _imageTag ;

            public static readonly string ErrType = ImageType.None.ToString();

            private static SortedDictionary<int, ImageType> InitImageTag()
            {
                SortedDictionary<int, ImageType> list = new SortedDictionary<int, ImageType>();

                list.Add((int)ImageType.BMP, ImageType.BMP);
                list.Add((int)ImageType.JPG, ImageType.JPG);
                list.Add((int)ImageType.GIF, ImageType.GIF);
                list.Add((int)ImageType.PCX, ImageType.PCX);
                list.Add((int)ImageType.PNG, ImageType.PNG);
                list.Add((int)ImageType.PSD, ImageType.PSD);
                list.Add((int)ImageType.RAS, ImageType.RAS);
                list.Add((int)ImageType.SGI, ImageType.SGI);
                list.Add((int)ImageType.TIFF, ImageType.TIFF);
                return list;

            }

            /// <summary> 
            /// 通过文件头判断图像文件的类型 
            /// </summary> 
            /// <param name="path"></param> 
            /// <returns></returns> 
            public static string CheckImageTypeName(string path)
            {
                return CheckImageType(path).ToString();
            }
            /// <summary> 
            /// 通过文件头判断图像文件的类型 
            /// </summary> 
            /// <param name="path"></param> 
            /// <returns></returns> 
            public static ImageType CheckImageType(string path)
            {
                byte[] buf = new byte[2];
                try
                {
                    using (StreamReader sr = new StreamReader(path))
                    {
                        int i = sr.BaseStream.Read(buf, 0, buf.Length);
                        if (i != buf.Length)
                        {
                            return ImageType.None;
                        }
                    }
                }
                catch (Exception exc)
                {
                    //Debug.Print(exc.ToString());
                    return ImageType.None;
                }
                return CheckImageType(buf);
            }

            /// <summary> 
            /// 通过文件的前两个自己判断图像类型 
            /// </summary> 
            /// <param name="buf">至少2个字节</param> 
            /// <returns></returns> 
            public static ImageType CheckImageType(byte[] buf)
            {
                if (buf == null || buf.Length < 2)
                {
                    return ImageType.None;
                }

                int key = (buf[1] << 8) + buf[0];
                ImageType s; 
                if (_imageTag.TryGetValue(key, out s))
                {
                    return s;
                } 
                return ImageType.None;
            }

        }

        /// <summary> 
        /// 图像文件的类型 
        /// </summary> 
        public enum ImageType
        {
            None = 0,
            BMP = 0x4D42,
            JPG = 0xD8FF,
            GIF = 0x4947,
            PCX = 0x050A,
            PNG = 0x5089,
            PSD = 0x4238,
            RAS = 0xA659,
            SGI = 0xDA01,
            TIFF = 0x4949
        }

  • 相关阅读:
    better-scroll 外层可以用positon:fixed 内层只能用position:absolute,不能用positon:fixed
    react中let一些数据是在render里,不是在retrun里
    onClick和ontouchmove一个是pc端一个是移动端,但是还是不知道有什么具体差别
    react中reder->return里: 1.有引号输入内容为'123' 2.没有引号输入内容为<p>123</p>
    if( 1<a<5 )这种写法是错误的,计算机不认识。正确写法是( a>1 && a<5),要不然会有运算法呢
    e.target
    transform: translateY(-50%) 实现元素垂直居中效果
    Uncaught TypeError: Cannot read property 'trim' of undefined
    push()方法返回的是数组新的长度
    transparent是透明的意思,实际上background默认的颜色就是透明的属性
  • 原文地址:https://www.cnblogs.com/Yjianyong/p/2313230.html
Copyright © 2011-2022 走看看