对指定的网页进行截图 C#版
对指定的网页进行截图 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; 
/**//// 
/// 捕获屏幕 
/// 
/// /// 
public void CaptureImage() 
try 
string url = "" + 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; 
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;
}
/**////
/// 捕获屏幕
///
/// ///
public void CaptureImage()
{
try
{
string url = "" + 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;
}
}
Posted in asp/c#

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。