碰到一个项目,需要对指定的网页进行截图保存,晕死!
需求永远都是怪异的.....
解决是关键~
遂写了以下代码,快准狠!(因为赶时间!)
可以实现对指定的页面获取,按指定的大小生成缩略图,当然也可以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;
}
}
分享到:
相关推荐
### C#将指定网页转换为图片的技术解析 在软件开发领域,尤其是Web应用程序与桌面应用程序交互的过程中,有时候会遇到需要将网页内容转换成图片的需求。例如,在制作网站快照、生成预览图或是进行自动化测试时,这...
根据给定的文件信息,我们可以深入探讨如何使用C#对指定网页进行截图的关键技术与实现细节。这不仅涉及到了.NET框架中的多个命名空间,如System.Drawing、System.Windows.Forms等,还利用了WebBrowser控件的强大功能...
总结,C#的`WebBrowser`控件结合`DrawToBitmap`方法,为我们提供了一种简单直观的方式获取网页截图。通过设置事件处理器和图形对象,我们可以捕获并保存网页的可视化表示。然而,要考虑到不同网页的加载特性以及兼容...
它是实现网页截图的基础,能够解析并渲染HTML页面。 2. **Graphics类**:这是.NET Framework中的一个类,用于进行图形绘制和操作。在截图过程中,我们可以利用`Graphics`对象来绘制WebBrowser控件的内容到一个...
本程序使用多线程从特定网页中提取textarea块中的内容。 具体从http://www.veryhuo.com提取中间演示textarea内的html文本,从(网页特效代码)->(详细分类)->html网页中textarea内容,程序内使用了1.多线程 2.正则...
标题 "指定对应网页截屏保存图片到本地" 描述了一个常见的IT任务,即从Web页面抓取可视内容并将其转化为图像文件保存在本地系统。这个过程通常涉及到编程,特别是使用.NET框架,C#语言,以及可能的一些自动化工具或...
结合上述两个部分,我们可以编写一个完整的C#程序,打开指定网页并提取其标题: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; using HtmlAgilityPack; public class Program { ...
本话题聚焦于使用C#创建一个能自动刷新网页的程序,这个程序可以作为一个独立的exe执行文件运行。通过VS2015(Visual Studio 2015)这个强大的集成开发环境,我们可以轻松实现这个功能。 首先,我们需要了解C#的...
标题中的"C# 采值数据 获取指定网页的值 远程采值数据 文件"涉及到的是使用C#编程语言从远程网页抓取数据的过程。在IT领域,这通常指的是网络爬虫或者网页抓取技术,是一种自动化获取网页内容的程序设计方式。在C#中...
4. **WebPageBitmap 类的设计**:封装了网页截图的主要逻辑,包括加载网页、获取渲染后的图像以及对图像进行缩放等处理。 5. **GetImage 类的设计**:用于设置截图的相关参数,并调用 `WebPageBitmap` 类进行实际...
利用该控件不仅可以加载和浏览网页,还可以实现对网页内容进行打印的功能。本文将详细介绍如何通过 C# 和 WebBrowser 控件实现网页内容的打印。 #### 一、准备工作 在开始之前,我们需要创建一个Windows Forms ...
使用C#开发网页是一项涉及多个方面的技术活动,包括对开发环境的了解、网站框架的设计、数据库的集成和网站功能的实现。以下将详细解读上述文件中所涵盖的知识点。 1. 开发环境选择:文件指出,开发所用的工具为...
首先,最简单直接的方法是使用`System.Diagnostics.Process.Start()`方法启动默认的浏览器来打开指定的网页。以下是一个简单的示例: ```csharp using System.Diagnostics; // 打开百度主页 Process.Start(...
在C#编程中,我们经常需要与Web交互,比如实现一个功能,让应用程序能够自动打开浏览器并加载指定的网页。这个任务可以通过调用系统默认的浏览器来完成,也可以通过嵌入WebBrowser控件来实现。下面我们将详细讲解这...
结合GDI+,我们可以实现将网页捕获为图像的功能,这对于自动化测试、屏幕截图、或者在无网络环境下展示网页内容非常有用。通过上述步骤,你将能够利用C#编写出一个能读取任意网页并将其保存为多种图像格式的程序。
C#将指定网页添加到收藏夹的方法, 要创建快捷方式需要用到IWshRuntimeLibrary命名空间,在这里我们要USING一下。并在引用里添加一个COM,windows script host object model。
【C#定时刷新访问网页工具源码】是一个基于C#编程语言和WPF(Windows Presentation Foundation)框架开发的应用程序,其主要功能是周期性地自动访问用户设定的网页URL,以便进行实时数据监控或者自动化信息获取。...
在C# WinForm环境下开发应用程序时,有时我们需要与网页交互,比如实现自动登录并提取网页内容。这通常涉及到网络编程、HTML解析以及自动化控制技术。本文将深入探讨如何使用C#来实现这一功能。 首先,要实现自动...
项目“GetWebImage”可能就是实现了以上这些功能的一个C#程序,它可以自动访问指定的网页,抓取所有的图片链接,并将图片保存到本地。通过这样的项目,开发者不仅可以巩固C#基础知识,还能提升网络编程和文件操作的...
### C#网页计数器实现原理与代码解析 #### 一、引言 在Web开发中,有时我们需要统计页面的访问次数,这不仅有助于了解网站的流量情况,还能为后续的功能优化提供数据支持。本篇文章将详细介绍如何使用C#语言实现一...