asp.net - 自动刷新图像(无 javascript、flash、silverlight)

标签 asp.net image html-email ashx

我想显示每 2 秒(或类似)更改其内容的图像。 不幸的是,我不能使用 JavaScript、Flash 或 Silverlight,因为我想在传出的 html 电子邮件中使用动画,并在各种电子邮件客户端之间实现最大的兼容性。

所以,我尝试使用 .ashx 处理程序生成图像。但我无法刷新图像(或重新执行 ashx 处理程序)。我尝试了一个循环,但没有奏效。

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/png";

        string strDisplay = DateTime.Now.ToString();

        Bitmap bmpOut = new Bitmap(400, 50);
        Graphics g = Graphics.FromImage(bmpOut);
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.FillRectangle(Brushes.Black, 0, 0, 400, 50);
        g.DrawString(strDisplay, new Font("Verdana", 18), new SolidBrush(Color.White), 0, 0);

        MemoryStream ms = new MemoryStream();
        bmpOut.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        byte[] bmpBytes = ms.GetBuffer();
        bmpOut.Dispose();
        ms.Close();

        context.Response.BinaryWrite(bmpBytes);
        context.Response.End();

    }

我该怎么做,或者有其他解决方案吗?

编辑:图像内容未预定义。例如,它包含推文列表。

编辑:目前我们正在尝试 MJPEG。有谁知道更多关于这个和电子邮件客户的信息?

非常感谢您的帮助,

文森特

最佳答案

在阅读了一些评论后,真正的问题似乎是如何在电子邮件中显示动画图像序列。

您几乎永远不会被允许在电子邮件客户端中运行 JavaScript,即使您可以,客户端之间的支持也可能会有很大差异,而 Web 邮件客户端可能会搞砸。所以这个选项被取消了。

同样,Flash/Silverlight 不太可能得到电子邮件客户端的良好支持,并且需要安装浏览器插件,这在某些桌面电子邮件客户端软件中可能无法实现。所以这个选项被取消了。

所以我们只剩下动画 GIF 图像了。这种格式在“互联网时代”已经支持了很长时间。但是,您需要牢记两点:

  1. 大多数电子邮件客户端现在会阻止图片(实际上是所有外部资源),直到用户明确点击“显示图片和链接” 或他们的电子邮件客户端中的类似内容。这意味着它仍然 不保证他们会看到您的图像。您可以在发送电子邮件时将动画 gif 嵌入到电子邮件中,但随后您放弃了在动画中获取最新信息的能力。 (也就是说,我可能一周都没有阅读您的电子邮件,如果图片被嵌入,它现在是一周前的社交新闻,如果它是外部 URL,我可能不会点击“显示图片”)
  2. 动画 GIF 使用 256 色调色板,因此您无法进行摄影 具有摄影质量的动画。这个问题虽然出现 主要是显示文字内容,写出最近的社交 互动(推文/帖子),所以我们应该没问题。

假设这些条件适合您的应用程序,我们需要弄清楚如何在您在问题中发布的 HttpHandler 代码中生成动画 GIF。这不是一个新想法,我们不需要重新发明轮子。这里还有关于stackoverflow的其他帖子:

stackoverflow 第一篇文章中最受好评的答案对我来说似乎很合理: HOWTO: create an animated GIF using .Net (C#)

这种技术不依赖于任何外部库,并且有一些解释各种头字段的注释。在您的情况下,您将对此代码中的 buf3 字节数组感兴趣,它是每个帧的 header 。您可以在此处设置每个正在显示的图像的延迟。您可能会受益于在谷歌上快速搜索动画 GIF 规范,这会出现:

规范将允许您准确查找每个标题字段的作用。如果您不想了解 GIF 中的标题,那么也许只需回到其他人的实现,例如:NGif encoder on CodeProject .当然,如果您对流程的工作原理有更深入的了解,您将始终可以更好地控制流程。即使您使用其他人的实现,也很容易理解它在幕后所做的工作。

关于asp.net - 自动刷新图像(无 javascript、flash、silverlight),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8180084/

相关文章:

asp.net - 如何在 Kestrel 中启用 HTTP2

c# - 如何优雅地处理调用可能永远不会返回的方法

javascript - 根据时间更改图像

php - Google 邮件在 html 电子邮件中的图像的 src 路径中插入加号

twitter-bootstrap - 电子邮件 CSS 模板框架?

c# - 使用 Entity Framework 检查日期列表中的数据库表中是否存在任何值

c# - 将 utf8 格式的字符串写入 zip 文件 ( Ionic.Zip )

html - ion-navbar 背景图像未出现 - 仅显示白色 - Ionic 3

python - PIL(Python 图像库)中的 ANTIALIAS 与 BICUBIC?

java - 电子邮件链接似乎只是来自 Nexus 7(操作系统版本 : 4. 2.2)的文本