【问题标题】:Quality reduces after UploadedFile.SaveAs("")UploadedFile.SaveAs("") 后质量降低
【发布时间】:2013-10-17 23:02:11
【问题描述】:

我正在使用<asp:FileUpload /> 上传文件(图像),并在代码隐藏中使用UploadedFile.SaveAs("C://Path...") 将图像保存在服务器上。

这是我的完整代码:

protected void btnAddImage_OnClick(object sender, ImageClickEventArgs e)
{
    //_fuImage is the ID of the <asp:FileUpload />
    _fuImage.SaveAs(Server.MapPath(fullPath));
}

问题是它似乎降低了质量。下面是一些例子:左图是我要上传的,右图是上传到服务器上的。


这要感谢 Ashigore:

byte[] imageBytes = _fuImage.FileBytes;
File.WriteAllBytes(Server.MapPath(fullPath), imageBytes);

我已将字节存储在一个变量中,并将原始字节作为图像文件保存到服务器。

【问题讨论】:

  • 你改变图像格式了吗?
  • 不,我只是使用 SaveAs(),不多不少,我没有修改任何东西。
  • 两者的图像显示方式是否不同? &lt;img width="x" /&gt; 例如?
  • @StevenV 上传的所有 3 张图片都是 JPEG 文件,但正如您所见,它们在上传之前看起来相当不错
  • 那些看起来并没有更糟,它们看起来更好。对比度更高。

标签: c# asp.net


【解决方案1】:

我的猜测是您正在某处使用 Image 对象,该对象将 jpg 数据转换为原始位图数据并在保存时对其进行重新编码。为了保持原始质量,您只需要以永远不会转换为 Image 对象的方式处理原始字节。

【讨论】:

  • 但我使用标准的ASP.Net 方法:UploadedFile.SaveAs(string arg) 并且该方法不会转换任何内容。
  • 好吧,你似乎证明不是这样。你确定所有这些都发生在图像上吗?
  • 我发布了我使用的所有代码。但我开始认为SaveAs("") 确实可以转换数据。你知道我可以使用的另一种方法,它不会转换字节,所以我可以在上传时保存它吗?
  • 为了论证,使用 FileUpload.FileBytes 并使用 File.WriteAllBytes 或 FileStream 来保存数据,看看会发生什么。
【解决方案2】:

您能否在不使用网站的情况下直接在磁盘上查看由于此操作而保存的文件?将其与原件进行比较 - 有区别吗?显示时您可能会以某种方式更改图像。

另一种方法是使用FileUploadControl.OpenFile() 获取流,然后手动将其写入磁盘。

【讨论】:

    猜你喜欢
    • 2019-08-23
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2016-06-06
    • 2010-11-12
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多