源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

对指定的网页进行截图的效果 C#版

  • 时间:2021-04-05 16:18 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:对指定的网页进行截图的效果 C#版
碰到一个项目,需要对指定的网页进行截图保存,晕死! 需求永远都是怪异的..... 解决是关键~ 遂写了以下代码,快准狠!(因为赶时间!) 可以实现对指定的页面获取,按指定的大小生成缩略图,当然也可以1:1的产生图, 页面上的javascript 运行对截图貌似没任何影响,相当的正常,我个人都觉得很神奇。  首先对项目添加系统引用 System.Drawing; System.Drawing.Design; System.Windows.Forms; 获取指定网页并转换成图片的类: using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Windows.Forms; using System.Diagnostics; namespace MyLib {     public class GetImage     {         private int S_Height;         private int S_Width;         private int F_Height;         private int F_Width;         private string MyURL;         public int ScreenHeight         {             get { return S_Height; }             set { S_Height = value; }         }         public int ScreenWidth         {             get { return S_Width; }             set { S_Width = value; }         }         public int ImageHeight         {             get { return F_Height; }             set { F_Height = value; }         }         public int ImageWidth         {             get { return F_Width; }             set { F_Width = value; }         }         public string WebSite         {             get { return MyURL; }             set { MyURL = value; }         }         public GetImage(string WebSite, int ScreenWidth, int ScreenHeight, int ImageWidth, int ImageHeight)         {             this.WebSite = WebSite;             this.ScreenWidth = ScreenWidth;             this.ScreenHeight = ScreenHeight;             this.ImageHeight = ImageHeight;             this.ImageWidth = ImageWidth;         }         public Bitmap GetBitmap()         {             WebPageBitmap Shot = new WebPageBitmap(this.WebSite, this.ScreenWidth, this.ScreenHeight);             Shot.GetIt();             Bitmap Pic = Shot.DrawBitmap(this.ImageHeight, this.ImageWidth);             return Pic;         }     }     class WebPageBitmap     {         WebBrowser MyBrowser;         string URL;         int Height;         int Width;         public WebPageBitmap(string url, int width, int height)         {             this.Height = height;             this.Width = width;             this.URL = url;             MyBrowser = new WebBrowser();             MyBrowser.ScrollBarsEnabled = false;             MyBrowser.Size = new Size(this.Width, this.Height);         }         public void GetIt()         {             MyBrowser.Navigate(this.URL);             while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)             {                 Application.DoEvents();             }         }         public Bitmap DrawBitmap(int theight, int twidth)         {             Bitmap myBitmap = new Bitmap(Width, Height);             Rectangle DrawRect = new Rectangle(0, 0, Width, Height);             MyBrowser.DrawToBitmap(myBitmap, DrawRect);             System.Drawing.Image imgOutput = myBitmap;             System.Drawing.Image oThumbNail = new Bitmap(twidth, theight, imgOutput.PixelFormat);             Graphics g = Graphics.FromImage(oThumbNail);             g.CompositingQuality = CompositingQuality.HighSpeed;             g.SmoothingMode = SmoothingMode.HighSpeed;             g.InterpolationMode = InterpolationMode.HighQualityBilinear;             Rectangle oRectangle = new Rectangle(0, 0, twidth, theight);             g.DrawImage(imgOutput, oRectangle);             try             {                 return (Bitmap)oThumbNail;             }             catch (Exception ex)             {                 return null;             }             finally             {                 imgOutput.Dispose();                 imgOutput = null;                 MyBrowser.Dispose();                 MyBrowser = null;             }         }     } } 以下是调用方法,懒省事的方法,嘿嘿,赶时间就不说什么了,反正上面的抓取转换类已经写出来了,大家尽情的用异步,线程等方法自己玩吧!~     string UrlPath;     bool CaptureState = false;     Guid guid;     protected bool SaveOriginalPageToImage(Guid myGuid)     { //使用guid 来命名         guid = myGuid;         if (this.CurrentPageAct == PageAct.Edit)         {             string PagePath = Request.Url.LocalPath;             PagePath = PagePath.Replace("Operation", "Capture");             UrlPath = PagePath + "?act=view&ProjectNo=" + _projectNo;             Thread NewTh = new Thread(CaptureImage);             NewTh.SetApartmentState(ApartmentState.STA);             NewTh.Start();             while (NewTh.ThreadState == ThreadState.Running)             {             }             //返回截取状态             return CaptureState;         }         return false;     }     /**//// <summary>     /// 捕获屏幕     /// </summary>     /// <param name="UrlPath"></param>     /// <returns></returns>     public void CaptureImage()     {         try         {             string url = "http://" + Request.Url.Host + ":" + Request.Url.Port.ToString();             url = url + UrlPath;             GetImage thumb = new GetImage(url, 1024, 1200, 1024, 1200);             System.Drawing.Bitmap x = thumb.GetBitmap();             string FileName = DateTime.Now.ToString("yyyyMMddhhmmss");             x.Save(Server.MapPath("~/Capture/SavePage") + "\\" + guid + ".jpg");             CaptureState = true;         }         catch (Exception ex)         {             CaptureState = false;         }     }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部