Javascript ASP.NET MVC中的图像压缩

Javascript ASP.NET MVC中的图像压缩,javascript,c#,asp.net,model-view-controller,Javascript,C#,Asp.net,Model View Controller,我有很多大约30kb的图像(大约1000),如果你问为什么,索引的加载大小是45.5mb 我从服务器获取图像,然后转换为字节数组,然后转换为base64字符串以发送到索引中 data:image/webp;base64,{0} 我用这个: Html.Raw(String.Format(“数据:image/webp;base64,{0}”),Convert.ToBase64String(File.ReadAllBytes(“\\\\ImageServer\\ImagePathFolder\\im

我有很多大约30kb的图像(大约1000),如果你问为什么,索引的加载大小是45.5mb

我从服务器获取图像,然后转换为字节数组,然后转换为base64字符串以发送到索引中

data:image/webp;base64,{0}
我用这个:

Html.Raw(String.Format(“数据:image/webp;base64,{0}”),Convert.ToBase64String(File.ReadAllBytes(“\\\\ImageServer\\ImagePathFolder\\image.JPG”)。替换(“\\”,“\\\”))
到目前为止,加载索引大约需要24秒

我请求帮助压缩图像,至少得到我现在得到的一半大小

注意:所有这些代码都是在ASP.NETMVC中使用C编写的#


您应该在一个单独的请求中返回二进制大对象(“BLOB”,通常是大于一KB左右的任何对象)——这有许多优点,但主要原因是

  • 浏览器可以缓存单个响应和图像
  • 它们可以直接传输,而无需使用低效的格式(如Base64)对其进行编码(有效地使用1个字节传输6位数据)
然而,使用
data:
uri在页面中内联包含图像是浪费的,因为每次请求时都需要将图像数据加载并编码到Base64。尽可能避免磁盘IO(此外,您的代码没有使用异步IO,因此效率特别低)

在ASP.NET MVC和ASP.NET Core中,定义新操作以处理图像请求:

[HttpGet("images/{imageName}")]
public ActionResult GetImage( String imageName )
{
    String imagefileName = GetImageFileName( imageName ); // don't forget to sanitize input to prevent directory traversal attacks

    // Use `FileResult` to have ASP.NET MVC efficiently load and transmit the file rather than doing it yourself:
    return new FilePathResult( imagefileName, "image/jpeg" ); // assuming all images are JPEGs.
}
在页面中,使用


在ASP.NET WebForms中,您需要使用
*.ashx
,但原理是一样的。

性能是问题吗?因为如果是这样的话,压缩/解压缩只会让事情变慢。你不能压缩你的图像——它们已经是JPEG了。使用Base64编码将使用33%的更多空间(只有当图像小于几千字节时,使用
数据:
URI内联图像才有意义,而低效的编码弥补了不必单独发出HTTP请求的不足)。性能不是问题,问题是大小,我将一个数据集中的所有图像设置为加载到datatable中。
<img src="@( this.Url.Action("GetImage", new { imageName = "foo" } ) )" />