【问题标题】:Dynamically generating a thumbnail image from an URL image从 URL 图像动态生成缩略图
【发布时间】:2011-12-21 06:37:45
【问题描述】:

我想知道是否有人有一些代码/有用的链接来解释我如何做到这一点。 我很可能会这样使用它:

<img src="ShowThumb.aspx?image=http://the_image.jpg" alt="" />

谢谢。

【问题讨论】:

  • 涉及多个步骤。您的哪一部分有问题?
  • ASP.NET Thumbnail Solution 你在找什么?
  • 我发现这个:dotnetfunda.com/articles/article63.aspx,我能够得到工作。但是如何修改它,以便我不必先将图像保存为本地文件?
  • @Tenza - 请看我的回答。它将其保存到内存流中,因此无需将其保存为本地文件。如果有什么不明白的,请告诉我。

标签: c# asp.net image url thumbnails


【解决方案1】:

不要使用.aspx 文件,而是使用通用处理程序文件 (.ashx)。这意味着您只需要 1 个文件(无标记文件),因此它更整洁、更快捷。毕竟,您不会生成 Web 表单,所以 .aspx 文件不是您想要的。

您可以使用System.Drawing.Graphics.DrawImage() 生成缩略图。

这样简单的事情就可以了:

Bitmap bmpOut = new Bitmap(width, height);
Bitmap B = new Bitmap(context.Server.MapPath(ImageURL));

Graphics g = Graphics.FromImage(bmpOut);
g.InterpolationMode = InterpolationMode.High;
g.DrawImage(B, 0, 0, width, height);


context.Response.ContentType = "image/PNG";
MemoryStream MemStream = new MemoryStream();
B.Save(MemStream, System.Drawing.Imaging.ImageFormat.Png);

B.Dispose();

MemStream.WriteTo(HttpContext.Current.Response.OutputStream);

width & heightinteger 值,ImageURL 是本地 URI 字符串

我不会使用 HTML/CSS 中的宽度/高度属性来调整您的图像大小。这意味着您将完整尺寸的图像发送给客户端,浪费了每个人的带宽和时间!此外,当 HTML 调整它的大小时,它通常会做一个粗制滥造的扭曲工作。


顺便说一句,我曾经像这样生成动态缩略图,但我认为每次发出 HTTP 请求时都在调整图像大小时性能会受到影响。

因此,每当上传主图像时,我都会将缩略图保存到一个物理位置,并在我的 HTML 中调用它。

【讨论】:

  • 是否可以使用这样的东西,而不必将图像保存为本地文件,而是直接从源中获取它作为流?
  • 是的,这正是这段代码的作用。它将它保存到内存流中
  • 考虑到您的经验,也许使用某种网络服务会更好,因为我不会花费空间或处理。
  • @Tenza - 我不确定网络服务有什么好处?
  • 就个人而言,我喜欢在 Image 类(Bitmap 继承自)上使用 GetThumbnailImage 方法。方便多了,虽然我相信它总是使用 JPEG 编码并且你不能设置质量。
【解决方案2】:

你在正确的轨道上:我做过一次这样的事情,只使用了一个 HTTP-Handler (ashx)。在那里,您可以使用 Image 类加载 .jpg 并调整大小并返回它。

不要忘记将处理程序限制为仅调整您域中的图像大小,否则可能会变得非常危险(容易受到 DOS 攻击)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 2016-05-05
    • 2016-04-09
    • 2013-01-14
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多