我担心此重载中的第三个参数validateImageData。该文档没有对此做太多解释,仅说明它导致图像数据得到验证,但没有详细信息,究竟要执行哪些操作来验证图像数据?

public static Image FromStream (
    Stream stream,
    bool useEmbeddedColorManagement,
    bool validateImageData
)

我想在Web应用程序中使用它,所以,我想知道如果将validateImageData设置为true,将会发生什么,我想确保用户上传的是有效图像,建议将validateImageData设置为true。还是引发一个异常足以捕获异常?另外,可以将validateImageData设置为true可以以任何方式影响性能吗? (用户可以上传最大为250k的图片)

谢谢

最佳答案

从Reflector,我们看到:

if (validateImageData)
{
    num = SafeNativeMethods.Gdip.GdipImageForceValidation(new HandleRef(null, zero));
    if (num != 0)
    {
        SafeNativeMethods.Gdip.GdipDisposeImage(new HandleRef(null, zero));
        throw SafeNativeMethods.Gdip.StatusException(num);
    }
}

因此,我们看到GdipImageForceValidation被调用了(回想一下,System.Drawing只是GDI +的包装器)。此功能的文档不是很好:



不是很有用。但是,重点在于-询问图像文件以确保可以安全地加载。这可能会导致整个图像被加载到内存中。

如果您接受用户的输入,我肯定会将此标志设置为true-您永远不知道用户将上传哪种文件(格式错误或其他格式)。安全胜过遗憾。这就是为什么默认值为true的原因。

另请注意,对于服务器环境,建议不要使用 GDI + 。您最好使用System.Windows.Media.Imaging

关于c# - validateImageData参数和Image.FromStream(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/420337/

10-10 16:26