时间:2021-05-19
碰到一个项目,需要对指定的网页进行截图保存,晕死!
需求永远都是怪异的.....
解决是关键~
遂写了以下代码,快准狠!(因为赶时间!)
可以实现对指定的页面获取,按指定的大小生成缩略图,当然也可以1:1的产生图,
页面上的javascript运行对截图貌似没任何影响,相当的正常,我个人都觉得很神奇。
首先对项目添加系统引用
System.Drawing;
System.Drawing.Design;
System.Windows.Forms;
获取指定网页并转换成图片的类:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.Drawing.Imaging;
usingSystem.Windows.Forms;
usingSystem.Diagnostics;
namespaceMyLib
{
publicclassGetImage
{
privateintS_Height;
privateintS_Width;
privateintF_Height;
privateintF_Width;
privatestringMyURL;
publicintScreenHeight
{
get{returnS_Height;}
set{S_Height=value;}
}
publicintScreenWidth
{
get{returnS_Width;}
set{S_Width=value;}
}
publicintImageHeight
{
get{returnF_Height;}
set{F_Height=value;}
}
publicintImageWidth
{
get{returnF_Width;}
set{F_Width=value;}
}
publicstringWebSite
{
get{returnMyURL;}
set{MyURL=value;}
}
publicGetImage(stringWebSite,intScreenWidth,intScreenHeight,intImageWidth,intImageHeight)
{
this.WebSite=WebSite;
this.ScreenWidth=ScreenWidth;
this.ScreenHeight=ScreenHeight;
this.ImageHeight=ImageHeight;
this.ImageWidth=ImageWidth;
}
publicBitmapGetBitmap()
{
WebPageBitmapShot=newWebPageBitmap(this.WebSite,this.ScreenWidth,this.ScreenHeight);
Shot.GetIt();
BitmapPic=Shot.DrawBitmap(this.ImageHeight,this.ImageWidth);
returnPic;
}
}
classWebPageBitmap
{
WebBrowserMyBrowser;
stringURL;
intHeight;
intWidth;
publicWebPageBitmap(stringurl,intwidth,intheight)
{
this.Height=height;
this.Width=width;
this.URL=url;
MyBrowser=newWebBrowser();
MyBrowser.ScrollBarsEnabled=false;
MyBrowser.Size=newSize(this.Width,this.Height);
}
publicvoidGetIt()
{
MyBrowser.Navigate(this.URL);
while(MyBrowser.ReadyState!=WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
publicBitmapDrawBitmap(inttheight,inttwidth)
{
BitmapmyBitmap=newBitmap(Width,Height);
RectangleDrawRect=newRectangle(0,0,Width,Height);
MyBrowser.DrawToBitmap(myBitmap,DrawRect);
System.Drawing.ImageimgOutput=myBitmap;
System.Drawing.ImageoThumbNail=newBitmap(twidth,theight,imgOutput.PixelFormat);
Graphicsg=Graphics.FromImage(oThumbNail);
g.CompositingQuality=CompositingQuality.HighSpeed;
g.SmoothingMode=SmoothingMode.HighSpeed;
g.InterpolationMode=InterpolationMode.HighQualityBilinear;
RectangleoRectangle=newRectangle(0,0,twidth,theight);
g.DrawImage(imgOutput,oRectangle);
try
{
return(Bitmap)oThumbNail;
}
catch(Exceptionex)
{
returnnull;
}
finally
{
imgOutput.Dispose();
imgOutput=null;
MyBrowser.Dispose();
MyBrowser=null;
}
}
}
}
以下是调用方法,懒省事的方法,嘿嘿,赶时间就不说什么了,反正上面的抓取转换类已经写出来了,大家尽情的用异步,线程等方法自己玩吧!~
stringUrlPath;
boolCaptureState=false;
Guidguid;
protectedboolSaveOriginalPageToImage(GuidmyGuid)
{
//使用guid来命名
guid=myGuid;
if(this.CurrentPageAct==PageAct.Edit)
{
stringPagePath=Request.Url.LocalPath;
PagePath=PagePath.Replace("Operation","Capture");
UrlPath=PagePath+"?act=view&ProjectNo="+_projectNo;
ThreadNewTh=newThread(CaptureImage);
NewTh.SetApartmentState(ApartmentState.STA);
NewTh.Start();
while(NewTh.ThreadState==ThreadState.Running)
{
}
//返回截取状态
returnCaptureState;
}
returnfalse;
}
///<summary>
///捕获屏幕
///</summary>
///<paramname="UrlPath"></param>
///<returns></returns>
publicvoidCaptureImage()
{
try
{
stringurl="http://"+Request.Url.Host+":"+Request.Url.Port.ToString();
url=url+UrlPath;
GetImagethumb=newGetImage(url,1024,1200,1024,1200);
System.Drawing.Bitmapx=thumb.GetBitmap();
stringFileName=DateTime.Now.ToString("yyyyMMddhhmmss");
x.Save(Server.MapPath("~/Capture/SavePage")+"\\"+guid+".jpg");
CaptureState=true;
}
catch(Exceptionex)
{
CaptureState=false;
}
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#实现简单屏幕监控的方法。分享给大家供大家参考。具体如下:这是一段C#编写的屏幕监控代码,可以自动对屏幕进行截图,软件自身隐藏usingSyst
本文实例讲述了C#实现的滚动网页截图功能。分享给大家供大家参考,具体如下:usingSystem;usingSystem.Collections.Generic
本文实例讲述了C#实现在网页中根据url截图并输出到网页的方法。分享给大家供大家参考,具体如下:网页截图是很多站点的一个小需求,这段代码实现的是如何根据url获
360安全浏览器可以直接对网页进行截图,包括网页区域截图、当前网页截图、所有网页截图、窗口截图、全屏截图。第一次使用时会弹出一个消息框,告诉你如何开始截图。点击
本文实例讲述了C#实现对数组进行随机排序类。分享给大家供大家参考。具体如下:这个一个扩充C#随机数发生器的类,可以随机生成指定范围的数字,可以随机对数组进行排序