有个问题。我的服务器上托管了图片。我已经知道上传图像以调整大小并保存的方法,但我还记得另一个想法。
因此,例如,用户去上传图像,我不调整它并保存已调整大小的图像的另一个副本。相反,当用户通过ASP.NET img控件/标记请求图像时,它会动态调整图像大小以显示它并通过img标记/控件显示它。
我为什么要这样做?
节省磁盘空间。大多数服务器都有磁盘空间限制,但不是服务器处理限制。所以我想节省磁盘空间并改为使用处理空间。
编辑:作为一个初创网站,它目前比节省处理时间更能节省磁盘。此刻我没有太多的钱用于大量的空间。希望它会在网站发布时发生变化。
有什么想法吗?谢谢你们和男孩们。
答案 0 :(得分:4)
我假设您可以“控制”调整大小的图片的网址,例如,可以将完整尺寸的图片引用为<img src="uploads/myphoto.jpg"/>
,缩略图可以指向ASPX或ASHX,如<img src="uploads/myphoto.jpg.ashx"/>
?
这个 article on CodeProject - Dynamic Image Resize 似乎有你正在寻找的源代码(尽管它在VB中,如果你是C#人员,应该不难移植) 。希望有所帮助。
最后,我建议您考虑各种形式的缓存(使用Http-Headers,以确保尽可能在客户端或代理处缓存图像;以及使用内置的ASP.NET功能来避免不必要的处理相反的图像反复出现)。
虽然您将节省磁盘配额,但您实际上是在放慢每个其他页面/请求的速度......只是一个想法。
答案 1 :(得分:2)
动态图像大小调整具有许多优点,其中最少的是减少磁盘空间使用。但是,它确实需要与一种持久性缓存相结合,例如Amazon CloudFront或磁盘缓存。
动态图像大小调整可以让您在网站上获得极大的灵活性,而预生成的图像变体可以锁定您,防止您必须进行的最终更改。与缓存结合使用时,两者之间没有运行时性能差异。
ImageResizer library offers disk caching, CloudFront caching, and correct memory and cache management。自2007年以来,它一直在不断改进和维护,并且非常防弹。它也运行着一些社交网站,有些拥有超过一百万张图片。
这是经过时间考验,经过流量测试和经过单元测试的库:)它使用起来非常简单 - 您只需将?width=x&height=y
添加到查询字符串即可。功能可以通过20多个插件添加,因此您不会被未使用的代码和功能所拖累。
CraigD提到的文章因其使用HttpHandler而不是使用HttpModule而在性能方面受到限制 - 在将调整大小后的图像写入磁盘后,HttpHandler无法将请求传回IIS本机代码执行。它也不能正确调整jpeg编码或与ASP.NET缓存或URL授权系统一起使用。虽然,我不得不承认 - 与我见过的大部分示例代码相比,它violates far fewer of the image resizing pitfalls I've compiled。
我强烈建议using the ImageResizer library。这是很好的代码,我写了:)如果你最终使用示例代码或编写自己的代码,please avoid these pitfalls!
答案 2 :(得分:0)
您可以创建IHttpHandler的实现来响应图像请求,在该处理程序中,您可以拥有从磁盘加载图像并将其转换为所需大小的代码。您需要使用响应返回正确的mime类型,并使用WriteBytes方法(或类似的东西,我忘记了名称)。此外,您可以查看内容过期标头,以便可以不必每次由同一客户端加载图像,而是缓存。
答案 3 :(得分:0)
您声称无限制处理但磁盘空间有限。大多数情况下,即使他们没有强制执行处理限制,因为您拥有更多客户,点击您的网站,处理将是比存储空间更糟糕的瓶颈,并且添加更多处理将花费更多。此外,
答案 4 :(得分:-1)
实际上并不是实际调整图像的大小,而是在显示图像时调整大小,但我成功使用只是简单
<img src="myimage" height="height you want to give" width="width you want
to give" alt="" />
每次都在工作。