如何在程序中判断用户上的图片本身就是.png格式,而并非其它格式图片把后缀名改成.png的.
比如:要上传.png格式图片,用户没有,把一张123.jpg或其它格式图片改了一下后缀名(123.png),并非用工具去真的把图片转成
.png格式的.
因为把上传图片下载下来时,点击另存为,没有.png格式的选项.
请高手帮帮忙!

解决方案 »

  1.   

    俺以前也考虑过类似问题,记得当时是把上传的图片用 Image 实例化,然后对 Image 实例的属性进行检测的,时间久了代码找不到了,lz 自己查查 MSDN 试试看吧!
      

  2.   

    如果你有兴趣看看看.gif jpg png的文件组织结构,把上传来的图片转化成字节流来比较。
    不过一般来说你不用去判断,人家上传东西错了就错了,显示不了就是了。你只要把大小控制就行了
      

  3.   

    http://www.moon-soft.com/program/format/
    这里有一些
      

  4.   

    找了点资料,说是
    图片的mime 类型 不管你是改成什么后缀名都不会变. 
    但是要区分浏览器. 看到区分浏览器,我就头大.最讨厌弄浏览器兼容性这方面的问题了.
    有人懂mime这么?
      

  5.   

    这个是我收集的文件格式的头尾的特征码。<?xml version="1.0" encoding="utf-8" ?>
    <root>
      <Token Format=".jpg">
        <DNA>255, 216</DNA>
        <DNA>255, 217</DNA>
      </Token>
      <Token Format=".jpeg">
        <DNA>255, 216</DNA>
        <DNA>255, 217</DNA>
      </Token>
      <Token Format=".bmp">
        <DNA>66, 77</DNA>
        <DNA />
      </Token>
      <Token Format=".png">
        <DNA>137, 80, 78, 71, 13, 10, 26, 10</DNA>
        <DNA />
      </Token>
      <Token Format=".gif">
        <DNA>71, 73, 70, 56</DNA>
        <DNA />
      </Token>
      <Token Format=".exe">
        <DNA>77, 90</DNA>
        <DNA />
      </Token>
      <Token Format=".com">
        <DNA>77, 90</DNA>
        <DNA />
      </Token>
      <Token Format=".rar">
        <DNA>82, 97, 114, 33, 26, 7, 0</DNA>
        <DNA />
      </Token>
      <Token Format=".zip">
        <DNA>80, 75, 3, 4</DNA>
        <DNA />
      </Token>
    </root>
      

  6.   

    应该要IO转换下的吧 读取图片不是PNG格式的读出来写进PNG文件里应该可以
      

  7.   

     System.IO.FileStream fs = new System.IO.FileStream(hifile, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                    System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
                    string fileclass = "";
                    byte buffer;
                    try
                    {
                        buffer = r.ReadByte();
                        fileclass = buffer.ToString();
                        buffer = r.ReadByte();
                        fileclass += buffer.ToString();
                    }
                    catch
                    {
                        return result;
                    }
                    r.Close();
                    fs.Close();                //重置文件名
                    string filename = "";
                    if (fileclass == "255216")//后缀名设置为jpg格式
                    {
                        //获取文件后缀名
                        string filetype = file.Substring(file.LastIndexOf("."), file.Length - file.LastIndexOf("."));                    if (filetype.ToLower() != ".jpg" && filetype.ToLower() != "jpeg")
                        {
                            filename = hifile.Substring(0, hifile.Length - (hifile.Length - hifile.LastIndexOf("."))) + ".jpg";
                            ReName(hifile, filename);
                            message = file.Substring(0, file.Length - (file.Length - file.LastIndexOf("."))) + ".jpg";
                            message = message.Replace("/", "\\");
                            result = 1;
                        }
                        else
                        {
                            result = 1;
                            message = file.Replace("/", "\\");
                        }                }
                    else if (fileclass == "7173")//后缀名设置为gif
                    {
                        filename = hifile.Substring(0, hifile.Length - (hifile.Length - hifile.LastIndexOf("."))) + ".gif";
                        ReName(hifile, filename);
                        message = file.Substring(0, file.Length - (file.Length - file.LastIndexOf("."))) + ".gif";
                        message = message.Replace("/", "\\");
                        result = 1;
                    }
                    else if (fileclass == "6677")//后缀名设置为bmp
                    {
                        filename = hifile.Substring(0, hifile.Length - (hifile.Length - hifile.LastIndexOf("."))) + ".bmp";
                        ReName(hifile, filename);
                        message = file.Substring(0, file.Length - (file.Length - file.LastIndexOf("."))) + ".bmp";
                        message = message.Replace("/", "\\");
                        result = 1;
                    }
                    else if (fileclass == "13780")//后缀名设置为png
                    {
                        filename = hifile.Substring(0, hifile.Length - (hifile.Length - hifile.LastIndexOf("."))) + ".png";
                        ReName(hifile, filename);
                        message = file.Substring(0, file.Length - (file.Length - file.LastIndexOf("."))) + ".png";
                        message = message.Replace("/", "\\");
                        result = 1;
                    }  参考  从别的地方弄的.
      

  8.   

    判断文件的mime类型啊  '.bmp'    : 'image/x-ms-bmp',
      '.gif'    : 'image/gif',
      '.jpg'    : 'image/jpeg',
      '.png'    : 'image/png',
      

  9.   


    Bitmap partImg = new Bitmap(100, 100);partImg.Save(filePath, ImageFormat.Jpeg);
      

  10.   

    前台aspx:   <asp:FileUpload ID="FileUpload1" runat="server" />    后台c#:string fileType=FileUpload1.PostedFile.ContentType; //获取上传文件的mime类型
      

  11.   

    刚才看刚了
    这个不知行不行
     
    http://hi.baidu.com/txbzpfwl/blog/item/fd9b42441a222a8bb2b7dc03.htmlhttp://blog.chinaunix.net/u2/64377/showart_511450.html
      

  12.   

    其实直接获得Image对象的RawFormat
    参考MSDN:
    http://msdn.microsoft.com/zh-cn/library/system.drawing.image.rawformat%28VS.80%29.aspx
    以下是一段实例代码
    转自:http://kb.cnblogs.com/a/1494261/        /// <summary>
         /// 返回图片格式(和文件名后缀无关)
            /// </summary>
            /// <param name="strImgPath">图片路径及名称</param>
            /// <returns>jpeg\gif\bmp\png\tif\icon\wmf</returns>
            string GetImageFormat(string strImgFilePath)
            {
                string strImgFormat = "";
                System.Drawing.Image imgSrc = System.Drawing.Image.FromFile(strImgFilePath);            if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
                    strImgFormat = "jpeg";
                else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
                    strImgFormat = "gif";
                else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))
                    strImgFormat = "bmp";
                else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
                    strImgFormat = "png";
                else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))
                    strImgFormat = "tiff";
                else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))
                    strImgFormat = "icon";
                else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Wmf))
                    strImgFormat = "wmf";            return strImgFormat;        }