我担心这个重载中的第三个参数,validateImageData。文档没有对此进行太多解释,它只说明它会导致图像数据被验证,但没有详细信息,到底是做什么来验证图像数据的?
public static Image FromStream (
Stream stream,
bool useEmbeddedColorManagement,
bool validateImageData
)
我想在网络应用程序中使用它,所以,我想知道如果我将 validateImageData 设置为 true 到底会发生什么,我想确保用户上传的是有效的图像,是否建议将 validateImageData 设置为 true或者如果抛出异常,是否足以捕获异常?另外,将 validateImageData 设置为 true 是否会以任何方式影响性能? (用户最多可以上传250k大小的图像)
Thanks
从 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 http://msdn.microsoft.com/en-us/library/ms534041(VS.85).aspx被调用(回想一下,System.Drawing 只是 GDI+ 的包装器)。这个函数的文档不是很好:
该函数强制验证图像。
不是很有用。然而,重点是 - 图像文件被询问以确保它可以安全加载。这可能会导致整个图像被加载到内存中。
如果您接受用户的输入,我当然会将此标志设置为 true - 您永远不知道用户将上传哪种文件(格式错误或其他)。安全总比后悔好。这就是为什么默认值是true
.
另请注意,GDI+ 是not推荐用于服务器环境。你最好使用System.Windows.Media.Imaging
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)