`
qzriso
  • 浏览: 242904 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

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;  
    }  
    /**//// <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#把指定网页转换成图片

    ### C#将指定网页转换为图片的技术解析 在软件开发领域,尤其是Web应用程序与桌面应用程序交互的过程中,有时候会遇到需要将网页内容转换成图片的需求。例如,在制作网站快照、生成预览图或是进行自动化测试时,这...

    对指定的网页进行截图

    根据给定的文件信息,我们可以深入探讨如何使用C#对指定网页进行截图的关键技术与实现细节。这不仅涉及到了.NET框架中的多个命名空间,如System.Drawing、System.Windows.Forms等,还利用了WebBrowser控件的强大功能...

    C# WebBrowser获取网页截图

    总结,C#的`WebBrowser`控件结合`DrawToBitmap`方法,为我们提供了一种简单直观的方式获取网页截图。通过设置事件处理器和图形对象,我们可以捕获并保存网页的可视化表示。然而,要考虑到不同网页的加载特性以及兼容...

    C#生成网页截图 将指定html网页转换成图片保存到本地

    它是实现网页截图的基础,能够解析并渲染HTML页面。 2. **Graphics类**:这是.NET Framework中的一个类,用于进行图形绘制和操作。在截图过程中,我们可以利用`Graphics`对象来绘制WebBrowser控件的内容到一个...

    C#从指定的网站提取网页内容

    本程序使用多线程从特定网页中提取textarea块中的内容。 具体从http://www.veryhuo.com提取中间演示textarea内的html文本,从(网页特效代码)-&gt;(详细分类)-&gt;html网页中textarea内容,程序内使用了1.多线程 2.正则...

    指定对应网页截屏保存图片到本地

    标题 "指定对应网页截屏保存图片到本地" 描述了一个常见的IT任务,即从Web页面抓取可视内容并将其转化为图像文件保存在本地系统。这个过程通常涉及到编程,特别是使用.NET框架,C#语言,以及可能的一些自动化工具或...

    C#打开指定网页源码

    结合上述两个部分,我们可以编写一个完整的C#程序,打开指定网页并提取其标题: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; using HtmlAgilityPack; public class Program { ...

    C# 自动刷新网页

    本话题聚焦于使用C#创建一个能自动刷新网页的程序,这个程序可以作为一个独立的exe执行文件运行。通过VS2015(Visual Studio 2015)这个强大的集成开发环境,我们可以轻松实现这个功能。 首先,我们需要了解C#的...

    C# 采值数据 获取指定网页的值 远程采值数据 文件

    标题中的"C# 采值数据 获取指定网页的值 远程采值数据 文件"涉及到的是使用C#编程语言从远程网页抓取数据的过程。在IT领域,这通常指的是网络爬虫或者网页抓取技术,是一种自动化获取网页内容的程序设计方式。在C#中...

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

    4. **WebPageBitmap 类的设计**:封装了网页截图的主要逻辑,包括加载网页、获取渲染后的图像以及对图像进行缩放等处理。 5. **GetImage 类的设计**:用于设置截图的相关参数,并调用 `WebPageBitmap` 类进行实际...

    C#打印网页内容

    利用该控件不仅可以加载和浏览网页,还可以实现对网页内容进行打印的功能。本文将详细介绍如何通过 C# 和 WebBrowser 控件实现网页内容的打印。 #### 一、准备工作 在开始之前,我们需要创建一个Windows Forms ...

    使用C#制作网页

    使用C#开发网页是一项涉及多个方面的技术活动,包括对开发环境的了解、网站框架的设计、数据库的集成和网站功能的实现。以下将详细解读上述文件中所涵盖的知识点。 1. 开发环境选择:文件指出,开发所用的工具为...

    C#实现Winform中打开网页页面的方法

    首先,最简单直接的方法是使用`System.Diagnostics.Process.Start()`方法启动默认的浏览器来打开指定的网页。以下是一个简单的示例: ```csharp using System.Diagnostics; // 打开百度主页 Process.Start(...

    C#使用游览器打开指定网页

    在C#编程中,我们经常需要与Web交互,比如实现一个功能,让应用程序能够自动打开浏览器并加载指定的网页。这个任务可以通过调用系统默认的浏览器来完成,也可以通过嵌入WebBrowser控件来实现。下面我们将详细讲解这...

    picture_C#_C#webBrowser_网页保存_源码

    结合GDI+,我们可以实现将网页捕获为图像的功能,这对于自动化测试、屏幕截图、或者在无网络环境下展示网页内容非常有用。通过上述步骤,你将能够利用C#编写出一个能读取任意网页并将其保存为多种图像格式的程序。

    C#将指定网页添加到收藏夹的方法

    C#将指定网页添加到收藏夹的方法, 要创建快捷方式需要用到IWshRuntimeLibrary命名空间,在这里我们要USING一下。并在引用里添加一个COM,windows script host object model。

    C#定时刷新访问网页工具源码

    【C#定时刷新访问网页工具源码】是一个基于C#编程语言和WPF(Windows Presentation Foundation)框架开发的应用程序,其主要功能是周期性地自动访问用户设定的网页URL,以便进行实时数据监控或者自动化信息获取。...

    C# winfrom 自动登录网页 提取网页内容

    在C# WinForm环境下开发应用程序时,有时我们需要与网页交互,比如实现自动登录并提取网页内容。这通常涉及到网络编程、HTML解析以及自动化控制技术。本文将深入探讨如何使用C#来实现这一功能。 首先,要实现自动...

    C#WebBrowser导出网页所有图片

    项目“GetWebImage”可能就是实现了以上这些功能的一个C#程序,它可以自动访问指定的网页,抓取所有的图片链接,并将图片保存到本地。通过这样的项目,开发者不仅可以巩固C#基础知识,还能提升网络编程和文件操作的...

    c#网页计数器 c#网页计数器

    ### C#网页计数器实现原理与代码解析 #### 一、引言 在Web开发中,有时我们需要统计页面的访问次数,这不仅有助于了解网站的流量情况,还能为后续的功能优化提供数据支持。本篇文章将详细介绍如何使用C#语言实现一...

Global site tag (gtag.js) - Google Analytics