C#將網頁內容轉換成圖片儲存到本地( webbrowser 可應用於B/S結構中)

來源:互聯網
上載者:User

代碼:

http://download.csdn.net/source/1669301

SaveHtMLtoImageComm

共通模組類定義


GetImage.cs

定義

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using System.Drawing;<br />namespace SaveHtMLtoImageComm<br />{<br /> public class GetImage<br /> {<br /> private int S_Height;<br /> private int S_Width;<br /> private int F_Height;<br /> private int F_Width;<br /> private string MyURL;<br /> public int ScreenHeight<br /> {<br /> get { return S_Height; }<br /> set { S_Height = value; }<br /> }<br /> public int ScreenWidth<br /> {<br /> get { return S_Width; }<br /> set { S_Width = value; }<br /> }<br /> public int ImageHeight<br /> {<br /> get { return F_Height; }<br /> set { F_Height = value; }<br /> }<br /> public int ImageWidth<br /> {<br /> get { return F_Width; }<br /> set { F_Width = value; }<br /> }<br /> public string WebSite<br /> {<br /> get { return MyURL; }<br /> set { MyURL = value; }<br /> }<br /> public GetImage(string WebSite, int ScreenWidth, int ScreenHeight, int ImageWidth, int ImageHeight)<br /> {<br /> this.WebSite = WebSite;<br /> this.ScreenWidth = ScreenWidth;<br /> this.ScreenHeight = ScreenHeight;<br /> this.ImageHeight = ImageHeight;<br /> this.ImageWidth = ImageWidth;<br /> }<br /> public Bitmap GetBitmap()<br /> {<br /> WebPageBitmap Shot = new WebPageBitmap(this.WebSite, this.ScreenWidth, this.ScreenHeight);<br /> Shot.GetIt();<br /> Bitmap Pic = Shot.DrawBitmap(this.ImageHeight, this.ImageWidth);<br /> return Pic;<br /> }<br /> }<br />}<br />

WebPageBitmap.cs類 定義

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using System.Drawing;<br />using System.Drawing.Drawing2D;<br />using System.Windows.Forms;<br />using System.Net;<br />using System.Runtime.InteropServices;<br />namespace SaveHtMLtoImageComm<br />{</p><p> public struct Struct_INTERNET_PROXY_INFO<br />{<br />public int dwAccessType;<br />public IntPtr proxy;<br />public IntPtr proxyBypass;<br />};<br /> public class WebPageBitmap<br /> {<br /> [DllImport("wininet.dll", SetLastError = true)]<br /> private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);<br /> private void RefreshIESettings(string strProxy)<br /> {<br /> const int INTERNET_OPTION_PROXY = 38;<br /> const int INTERNET_OPEN_TYPE_PROXY = 3;<br /> Struct_INTERNET_PROXY_INFO struct_IPI;<br /> // Filling in structure<br /> struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;<br /> struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);<br /> struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");<br /> // Allocating memory<br /> IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));<br /> // Converting structure to IntPtr<br /> Marshal.StructureToPtr(struct_IPI, intptrStruct, true);<br /> bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));<br /> }<br /> WebBrowser MyBrowser;<br /> string URL;<br /> int Height;<br /> int Width;</p><p> public WebPageBitmap(string url, int width, int height)<br /> {<br /> RefreshIESettings("www.my400800.cn:80");<br /> this.Height = height;<br /> this.Width = width;<br /> this.URL = url;<br /> MyBrowser = new WebBrowser();<br /> WebProxy proxy = new WebProxy("blog.my400800.cn", 8080); //定義一個網關對象</p><p> // MyBrowser. .Proxy = proxy;<br /> MyBrowser.ScrollBarsEnabled = false;<br /> MyBrowser.Size = new Size(this.Width, this.Height);<br /> }<br /> public void GetIt()<br /> {<br /> MyBrowser.Navigate(this.URL);</p><p> while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)<br /> {<br /> Application.DoEvents();<br /> }<br /> }<br /> public Bitmap DrawBitmap(int theight, int twidth)<br /> {<br /> Bitmap myBitmap = new Bitmap(Width, Height);<br /> Rectangle DrawRect = new Rectangle(0, 0, Width, Height);<br /> MyBrowser.DrawToBitmap(myBitmap, DrawRect);<br /> System.Drawing.Image imgOutput = myBitmap;<br /> System.Drawing.Image oThumbNail = new Bitmap(twidth, theight, imgOutput.PixelFormat);<br /> Graphics g = Graphics.FromImage(oThumbNail);<br /> g.CompositingQuality = CompositingQuality.HighSpeed;<br /> g.SmoothingMode = SmoothingMode.HighSpeed;<br /> g.InterpolationMode = InterpolationMode.HighQualityBilinear;<br /> Rectangle oRectangle = new Rectangle(0, 0, twidth, theight);<br /> g.DrawImage(imgOutput, oRectangle);<br /> try<br /> {<br /> return (Bitmap)oThumbNail;<br /> }<br /> catch (Exception ex)<br /> {<br /> return null;<br /> }<br /> finally<br /> {<br /> imgOutput.Dispose();<br /> imgOutput = null;<br /> MyBrowser.Dispose();<br /> MyBrowser = null;<br /> }<br /> }<br /> }<br />}<br />

main.cs類 定義

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using System.Web;<br />using System.Threading;<br />using System.Web.UI;<br />namespace SaveHtMLtoImageComm<br />{<br /> public class main<br /> {<br /> public string strURl = "";<br /> public string strImgFileName = "";<br /> public Page Context = null;<br /> public void startImg() {<br /> string url = strURl;<br /> //GetImage thumb = new GetImage(url, 1024, 4000, 1024, 4000);<br /> GetImage thumb = new GetImage(url, 1024, 1024, 1024, 1024);<br /> System.Drawing.Bitmap x = thumb.GetBitmap();<br /> //string FileName = DateTime.Now.ToString("yyyyMMddhhmmss");<br /> x.Save(Context.Server.MapPath("~") + @"\image\" + strImgFileName);// FileName + ".jpg");<br /> }</p><p> }<br />}<br />

html轉換圖片調用測試方法

Default.aspx類 定義

using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using System.Web;<br />using System.Threading;<br />using System.Web.UI;<br />namespace SaveHtMLtoImageComm<br />{<br /> public class main<br /> {<br /> public string strURl = "";<br /> public string strImgFileName = "";<br /> public Page Context = null;<br /> public void startImg() {<br /> string url = strURl;<br /> //GetImage thumb = new GetImage(url, 1024, 4000, 1024, 4000);<br /> GetImage thumb = new GetImage(url, 1024, 1024, 1024, 1024);<br /> System.Drawing.Bitmap x = thumb.GetBitmap();<br /> //string FileName = DateTime.Now.ToString("yyyyMMddhhmmss");<br /> x.Save(Context.Server.MapPath("~") + @"\image\" + strImgFileName);// FileName + ".jpg");<br /> }</p><p> }<br />}<br />

Default.aspx.cs類 定義

using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;<br />using SaveHtMLtoImageComm;<br />using System.Threading;<br />public partial class _Default : System.Web.UI.Page<br />{<br /> protected void Page_Load(object sender, EventArgs e)<br /> {<br /> }<br /> protected void Button1_Click(object sender, EventArgs e)<br /> {<br /> //string url = "http://www.my400800.cn";<br /> //GetImage thumb = new GetImage(url, 1024, 4000, 1024, 4000);<br /> //System.Drawing.Bitmap x = thumb.GetBitmap();<br /> //string FileName = DateTime.Now.ToString("yyyyMMddhhmmss");<br /> //x.Save(Server.MapPath("~")+ @"\" + FileName + ".jpg");<br /> //Console.WriteLine("成功");<br /> //Image1.ImageUrl = "";<br /> thread();<br /> }<br /> private void thread() {<br /> main m = new main();<br /> m.strURl =txt_url.Text;<br /> m.strImgFileName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";<br /> m.Context = Page;<br /> Thread th = new Thread(new ThreadStart(m.startImg));<br /> th.SetApartmentState(ApartmentState.STA);<br /> th.Start();<br /> while (th.IsAlive) {<br /> Thread.Sleep(100);<br /> }<br /> Image1.ImageUrl = "image/" + m.strImgFileName;<br /> Image1.Visible = true;</p><p> }<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.