【发布时间】:2015-02-15 20:13:08
【问题描述】:
我正在使用 gfx.DrawImage 在我的 Azure 托管网站上生成用户上传图像的缩略图。
时不时地,其中一个缩略图随机包含一个大的黑色部分,几乎就像调整大小被中断且未完成一样。如果我再次重新生成相同的图像,它几乎总是在第二次尝试时生成得非常好(没有黑色部分)。所以这是一个非常随机的问题,只会偶尔发生,并且无法始终如一地重现。
这是一个例子:
原图:
http://naturemap.blob.core.windows.net/userimages-splash/30161.jpg
受影响的缩略图:
http://canberranaturemap.org/ImgSrvr?Id=30161&No=1&W=160&MinH=120&MaxH=120
这是我正在使用的代码,它在 99.9% 的时间都有效!
Bitmap newImage = new Bitmap(originalImage, FinalWidthPx, HeightPx);
using (Graphics gfx = Graphics.FromImage(newImage))
{
gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
gfx.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
}
【问题讨论】:
-
有没有
OutOfMemoryException正在崛起?您是否有任何不会产生任何错误并且可能隐藏它们(或其他异常)的 try/catch? -
嗨,Jcl - 不,我不能说。我只是仔细检查了一下,我在任何地方都没有 try/catch 语句,而且在图像处理过程中我从未见过网页崩溃。我还检查了 Azure 日志,它说它没有 HTTP 服务器错误。嗯..
-
那我不知道,你可能会尝试对此做一些压力测试,比如喂几千张图像(例如,制作一个没有任何黑色的测试原始图像并检查对于结果图像底部的某些像素为黑色)并查看问题出现的频率是否不是“那个”随机或类似的东西。
-
(顺便说一句,作为旁注 - 并且与问题无关 - 如果您使用
System.Drawing,并且除了缩放之外没有进行进一步处理,请检查 Image.GetThumbnailImage() 而不是将自己拉到使用Graphics的新位图) -
谢谢。我尝试了 Image.GetThumbnailImage() 并且一切正常,但是生成的图像质量非常低并且非常粗糙/模糊。我认为它只适用于非常小的尺寸图像。您的负载测试想法有优点,也许这个问题与服务器上的线程/争用有关,即使同时请求正在调用相同的库/代码......?
标签: c# image-processing graphics