Автоматическое обновление изображения (без javascript, flash, silverlight) - PullRequest
3 голосов
/ 18 ноября 2011

Я хотел бы отобразить изображение, которое меняет свой контент каждые 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. Кто-нибудь знает больше об этом и почтовых клиентах?

Помощь высоко ценится,

Винсент

Ответы [ 3 ]

7 голосов
/ 20 ноября 2011

После прочтения некоторых комментариев возникает реальный вопрос: как отобразить анимированную последовательность изображений в электронном письме?

Вам почти никогда не разрешают запускать JavaScript внутри почтовых клиентов, и даже если вы можете, поддержка может сильно различаться между клиентами, и клиенты веб-почты могут испортить ситуацию. Так что эта опция была исключена.

Аналогичным образом Flash / Silverlight вряд ли будут иметь хорошую поддержку почтовых клиентов и требуют установки плагина для браузера, что может быть невозможно из-за некоторых программ-клиентов электронной почты для настольных компьютеров. Так что эта опция была исключена.

Итак, у нас остались анимированные GIF-изображения. Этот формат очень давно поддерживается в интернете. Однако вам нужно помнить две вещи:

  1. Большинство почтовых клиентов теперь блокируют изображения (фактически все внешние ресурсы), пока пользователь явно не нажмет «показать изображения и ссылки». или что-то подобное в их почтовом клиенте. Это значит его еще Не гарантировано, что они увидят ваше изображение. Возможно, вы сможете вставить анимированный GIF в электронное письмо при его отправке, но тогда вы откажетесь от возможности получать последнюю информацию в анимации. ( т. Е. Я мог бы не читать вашу электронную почту в течение недели, если изображение было внедрено, это уже недельная социальная новость, если для его внешнего URL-адреса я бы не стал нажимать «показать изображения» )
  2. Анимированные GIF-файлы используют 256-цветовую палитру, поэтому вы не можете фотографировать анимации с фотографическим качеством. Хотя этот вопрос появляется быть о отображении в основном текстового контента, выписывая последние социальные взаимодействия (твиты / посты), поэтому мы должны быть в порядке.

Предполагая, что эти условия подходят для вашего приложения, нам нужно выяснить, как создать анимированный GIF-код в коде HttpHandler, который вы разместили в вопросе. Это не новая идея, нам не нужно заново изобретать колесо. Есть и другие сообщения о stackoverflow здесь:

Наиболее оправданный ответ в первом посте stackoverflow выглядит для меня вполне разумно: HOWTO: создать анимированный GIF-файл с помощью .Net (C #)

Этот метод не зависит от каких-либо внешних библиотек и имеет некоторые комментарии, объясняющие различные поля заголовка. В вашем случае вас заинтересует байтовый массив buf3 в этом коде, который является заголовком для каждого кадра. Здесь вы можете установить задержку для каждого отображаемого изображения. Вы, вероятно, выиграете от быстрого поиска в Google по анимированным спецификациям GIF, который будет отображаться:

Спецификации позволят вам точно узнать, что делает каждое поле заголовка. Если у вас нет желания изучать заголовки в GIF, то, возможно, просто вернитесь к чьей-то реализации, например: Кодер NGif в CodeProject . Конечно, вы всегда будете иметь больший контроль над процессом, если у вас будет более глубокое понимание того, как он работает. Даже если вы используете чью-то реализацию, полезно понять, что происходит за кулисами.

1 голос
/ 18 ноября 2011

Вы можете использовать анимацию CSS 3 для этого, посмотрите http://www.1stwebdesigner.com/css/50-awesome-css3-animations/ для некоторых примеров.

Я сам не использовал CSS 3, но видел, как мои коллеги делают с ним классные вещи.

0 голосов
/ 18 ноября 2011

Можете ли вы не просто создать анимированный GIF?Я не знаю, откуда ваши изображения, но мне кажется, это самое простое решение.

Если это не удастся, вы можете создать службу, которая будет запускаться каждые 2 секунды на вашем сервере, но я не уверен, как вы можете подключить ее к своему сайту.

...