对指定的网页进行截图 C#版(Window Forms)

可以实现对指定的页面获取,按指定的大小生成缩略图,当然也可以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(00, 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(00, 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, 1024120010241200);
            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;
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值