从 Windows Azure 上的 html 页面生成屏幕截图

本文关键字:屏幕截图 html Windows Azure 上的 | 更新日期: 2023-09-27 18:35:11

我正在尝试从Windows Azure上的html页面生成屏幕截图。这是我在个人 IIS 上使用的代码,我知道它适用于每台测试计算机。

using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
class Program
{
    static void Main(string[] args)
    {
        new WebsiteToImage("http://www.google.com", "C:''screenshot.jpg");
    }
    // Define other methods and classes here
    public class WebsiteToImage
    {
        internal string _url;
        internal string _fileName;
        public WebsiteToImage(string url, string fileName)
        {
            _url = url;
            _fileName = fileName;
            // Thread 
            var thread = new Thread(Generate);
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            thread.Join();
        }
        private void Generate()
        {
            using (var browser = new WebBrowser { ScrollBarsEnabled = false })
            {
                browser.Navigate(_url);
                browser.DocumentCompleted += WebBrowser_DocumentCompleted;
                while (browser.ReadyState != WebBrowserReadyState.Complete)
                {
                    Application.DoEvents();
                }
                browser.Dispose();
            }
        }
        private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            // Capture 
            using (var bmp = new Bitmap(1280, 800))
            {
                var browser = (WebBrowser)sender;
                browser.ClientSize = new Size(1280, 800);
                browser.ScrollBarsEnabled = false;
                browser.BringToFront();
                browser.DrawToBitmap(bmp, browser.Bounds);
                var encoderParameters = new EncoderParameters(1);
                encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
                bmp.Save(_fileName, ImageCodecInfo.GetImageDecoders().FirstOrDefault(c => c.FormatID.Equals(ImageFormat.Jpeg.Guid)), encoderParameters);
            }
        }
    }
}

现在,在Azure上,我知道我不能使用GDI+,而且我很确定我也不能使用WebBrowser。任何想法或替代解决方案?甚至是第三部分组件。

从 Windows Azure 上的 html 页面生成屏幕截图

你还没有说你使用的是 Azure 网站还是 Azure 云服务,但从你所说的无法使用 GDI+ 来看,我猜是网站?

当然,您应该能够在云服务(Web 角色或辅助角色)中运行代码。如果代码是网站上托管的 Web 应用程序的一部分,则可以使用 Azure 存储队列添加要快照的 URL,然后在辅助角色上轮询该队列,运行代码,并将生成的文件存储到 Blob 存储中。

如果屏幕截图服务器上的预期负载较低,则可以使用超小型实例,这将花费很少。

更新:在这种情况下,Awesomium应该是一个选项。

我发现是否有网络服务/API可以抓取另一个网站的屏幕截图? 从那里这个服务使用开源代码完成任务。对于我们计划进行的轻度使用,这比自定义实施的解决方案要好。