首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别C#中损坏的tiff文件?

如何识别C#中损坏的tiff文件?
EN

Stack Overflow用户
提问于 2018-07-02 14:02:01
回答 1查看 659关注 0票数 0

我在C#应用程序中加载Tiff文件时有问题。当tiff文件上传到应用程序时,它会被挂起。之所以发生这种情况,是因为该tiff文件已损坏。

请推荐一种解决方案来识别此损坏的tiff文件,以便应用程序在上传时不会崩溃或挂起。

下面是代码片段,当在bmp对象中打开文件时,应用程序挂在该代码行中。

代码语言:javascript
复制
public void ReadTiff(byte[] fileData)
{
        try
        {
            using (var ms = new MemoryStream(fileData))
            {
                using (var bmp = new Bitmap(ms))
                {
                    // Some code
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
}

我试着用下面的文件:

  1. 试着在油漆里打开,却打不开。
  2. 也尝试在Windows查看器中打开,它无法打开。
  3. 尝试在多个在线图像查看器中打开,但仍然无法打开。
EN

回答 1

Stack Overflow用户

发布于 2018-07-02 15:36:14

如果图像返回ImageFormat.unknown,则使用下面的函数获取图像类型,它已损坏,并且不是有效的图像

代码语言:javascript
复制
public static ImageFormat GetImageFormat(byte[] bytes)
{
    var bmp    = Encoding.ASCII.GetBytes("BM");     // BMP
    var gif    = Encoding.ASCII.GetBytes("GIF");    // GIF
    var png    = new byte[] { 137, 80, 78, 71 };    // PNG
    var tiff   = new byte[] { 73, 73, 42 };         // TIFF
    var tiff2  = new byte[] { 77, 77, 42 };         // TIFF
    var jpeg   = new byte[] { 255, 216, 255, 224 }; // jpeg
    var jpeg2  = new byte[] { 255, 216, 255, 225 }; // jpeg canon

    if (bmp.SequenceEqual(bytes.Take(bmp.Length)))
        return ImageFormat.bmp;

    if (gif.SequenceEqual(bytes.Take(gif.Length)))
        return ImageFormat.gif;

    if (png.SequenceEqual(bytes.Take(png.Length)))
        return ImageFormat.png;

    if (tiff.SequenceEqual(bytes.Take(tiff.Length)))
        return ImageFormat.tiff;

    if (tiff2.SequenceEqual(bytes.Take(tiff2.Length)))
        return ImageFormat.tiff;

    if (jpeg.SequenceEqual(bytes.Take(jpeg.Length)))
        return ImageFormat.jpeg;

    if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length)))
        return ImageFormat.jpeg;

    return ImageFormat.unknown;
}

public enum ImageFormat
{
    bmp,
    jpeg,
    gif,
    tiff,
    png,
    unknown
}

参考文献:- Validate image from file in C#

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51137994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档