从 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。任何想法或替代解决方案?甚至是第三部分组件。
你还没有说你使用的是 Azure 网站还是 Azure 云服务,但从你所说的无法使用 GDI+ 来看,我猜是网站?
当然,您应该能够在云服务(Web 角色或辅助角色)中运行代码。如果代码是网站上托管的 Web 应用程序的一部分,则可以使用 Azure 存储队列添加要快照的 URL,然后在辅助角色上轮询该队列,运行代码,并将生成的文件存储到 Blob 存储中。
如果屏幕截图服务器上的预期负载较低,则可以使用超小型实例,这将花费很少。
更新:在这种情况下,Awesomium应该是一个选项。
我发现是否有网络服务/API可以抓取另一个网站的屏幕截图? 从那里这个服务使用开源代码完成任务。对于我们计划进行的轻度使用,这比自定义实施的解决方案要好。