0

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 も使用できないことは確かです。アイデアや代替ソリューションはありますか?サードパーティのコンポーネントでも。

4

3 に答える 3

1

Azure Web Sites を使用しているのか、Azure Cloud Services を使用しているのかはわかりませんが、GDI+ を使用できないということから、Web Sites を推測していますか?

コードは、Web ロールまたは Worker ロールのいずれかのクラウド サービスで確実に実行できるはずです。コードが Web サイトでホストされている Web アプリケーションの一部である場合は、Azure ストレージ キューを使用してスナップショットする URL を追加し、ワーカー ロールでそのキューをポーリングしてコードを実行し、結果のファイルをブロブ ストレージ。

スクリーン ショット サーバーで予想される負荷が低い場合は、コストがほとんどかからない極小インスタンスを使用することで問題を解決できる可能性があります。

于 2013-10-14T12:54:58.143 に答える
0

別の Web サイトのスクリーンショットを取得するための Web サービス/API はありますか? そこから、オープンソースコードでタスクを実行するこのサービス。私たちが計画している軽い使用では、これはカスタム実装ソリューションよりも優れています.

于 2013-10-15T07:55:48.303 に答える
0

更新:この場合、Awesomium をオプションにする必要があります。

于 2013-10-14T12:39:17.170 に答える