一、实现方法

//WebSiteThumbnail.cs文件,在BS项目中需要添加对System.Windows.Forms的引用

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace TestWebApp
{
    public class
WebSiteThumbnail
    {
       
Bitmap m_Bitmap;
       
string m_Url;
       
int m_BrowserWidth, m_BrowserHeight, m_ThumbnailWidth,
m_ThumbnailHeight;
       
public WebSiteThumbnail(string Url, int BrowserWidth, int
BrowserHeight, int ThumbnailWidth, int ThumbnailHeight)
       
{
           
m_Url = Url;
           
m_BrowserHeight = BrowserHeight;
           
m_BrowserWidth = BrowserWidth;
           
m_ThumbnailWidth = ThumbnailWidth;
           
m_ThumbnailHeight = ThumbnailHeight;
       
}
       
public static Bitmap GetWebSiteThumbnail(string Url, int
BrowserWidth, int BrowserHeight, int ThumbnailWidth, int
ThumbnailHeight)
       
{
           
WebSiteThumbnail thumbnailGenerator = new WebSiteThumbnail(Url,
BrowserWidth, BrowserHeight, ThumbnailWidth,
ThumbnailHeight);
           
return thumbnailGenerator.GenerateWebSiteThumbnailImage();
       
}
       
public Bitmap GenerateWebSiteThumbnailImage()
       
{
           
Thread m_thread = new Thread(new
ThreadStart(_GenerateWebSiteThumbnailImage));
           
m_thread.SetApartmentState(ApartmentState.STA);
           
m_thread.Start();
           
m_thread.Join();
           
return m_Bitmap;
       
}
       
private void _GenerateWebSiteThumbnailImage()
       
{
           
WebBrowser m_WebBrowser = new WebBrowser();
           
m_WebBrowser.ScrollBarsEnabled = false;
           
m_WebBrowser.Navigate(m_Url);
           
m_WebBrowser.DocumentCompleted += new
WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);

while (m_WebBrowser.ReadyState !=
WebBrowserReadyState.Complete)
               
Application.DoEvents();
           
m_WebBrowser.Dispose();
       
}
       
private void WebBrowser_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
       
{
           
WebBrowser m_WebBrowser = (WebBrowser)sender;
           
m_WebBrowser.ClientSize = new Size(this.m_BrowserWidth,
this.m_BrowserHeight);
           
m_WebBrowser.ScrollBarsEnabled = false;
           
m_Bitmap = new Bitmap(m_WebBrowser.Bounds.Width,
m_WebBrowser.Bounds.Height);
           
m_WebBrowser.BringToFront();
           
m_WebBrowser.DrawToBitmap(m_Bitmap, m_WebBrowser.Bounds);
           
m_Bitmap = (Bitmap)m_Bitmap.GetThumbnailImage(m_ThumbnailWidth,
m_ThumbnailHeight, null, IntPtr.Zero);
       
}

}
}

二、调用方法

//在任意网页中的Page_Load事件时,加入如下代码:

protected void Page_Load(object sender, EventArgs e)
       
{
           
Bitmap m_Bitmap = WebSiteThumbnail.GetWebSiteThumbnail("http://www.google.cn", 600, 600, 600,
600);
           
MemoryStream ms = new MemoryStream();
           
m_Bitmap.Save(ms,
System.Drawing.Imaging.ImageFormat.Png);//JPG、GIF、PNG等均可
           
byte[] buff = ms.ToArray();
           
Response.BinaryWrite(buff);
       }

基于Asp.net C#实现HTML转图片(网页快照)的更多相关文章

  1. 基于 Asp.Net的 Comet 技术解析

    Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现 ...

  2. 转:基于ASP.NET的Comet长连接技术解析

    原文来自于: Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的 ...

  3. 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)

    http://blog.csdn.net/jiuqiyuliang/article/details/19967031 目录: 基于asp.net + easyui框架,一步步学习easyui-data ...

  4. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

  5. 基于ASP.NET的新闻管理系统(一)

    1. 项目简介 1.1设计内容 (1)可以在首页查看各类新闻,可以点击新闻查看具体内容:可以查看不同类型的新闻,并了解热点新闻,可以在搜索框里输入要查找的内容. (2)在后台界面中,管理员可以修改密码 ...

  6. 基于Asp.Net Core,利用ZXing来生成二维码的一般流程

    本文主要介绍如何在.net环境下,基于Asp.Net Core,利用ZXing来生成二维码的一般操作.对二维码工作原理了解,详情见:https://blog.csdn.net/weixin_36191 ...

  7. 【ASP.NET实战教程】基于ASP.NET技术下多用户博客系统全程实战开发(NNblog)

    岁末主推:牛牛老师主讲,多用户博客系统,基于ASP.NET技术,年后将带来移动业务平台项目项目目标: 打造个性品牌Blogo,定制多用户博客 为每一个博客用户提供个性化的 blogo解决方案,打造精品 ...

  8. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  9. cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)

    cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2. cWeb开发框架下载,点击这里去下载. cWeb开发框架借鉴三层架构理论分为三层,分别是:cD ...

随机推荐

  1. [POJ2976] Dropping tests

    传送门:>Here< 题意:给出长度相等的数组a和b,定义他们的和为$\dfrac{a_1+a_2+...+a_n}{b_1+b_2+...+b_n}$.现在可以舍弃k对元素(一对即$a[ ...

  2. python中raise的用法

    有关于python里raise显示引发异常的方法: 当程序出错时,python会自动触发异常,也可以通过raise显示引发异常 一旦执行了raise语句,raise之后的语句不在执行 如果加入了try ...

  3. Django 调用报错 " ImportError: Couldn't import Django. "

    系统炸了导致不得已重装 安装 Django后 利用ORM 创建表的时候报错 Traceback (most recent call last): File "manage.py", ...

  4. stm32 HAL库编程驱动控制文件<stm32f1xx_hal_conf.h>的使能方法

    @2019-01-25 [小记] 工具化.易控制.易配置.效率高: 驱动控制文件<stm32f1xx_hal_conf.h>中驱动模块使能由STM32CubeMX工具配置使能

  5. CPU监控 解题报告

    CPU监控 这种题就需要小黄鸭调试法,不行就重构,动态gdb可能会死人,一堆tag的... 维护历史最值的一个核心是历史最值tag,它的意义是从上一次这个点下放tag之后到当前时刻的这个点的tag达到 ...

  6. centos7搭建ELK Cluster集群日志分析平台(一):Elasticsearch

    应用场景: ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构, 很多公司利用它来搭建可视化的海量日志分析平 ...

  7. hdu 1024 Max Sum Plus Plus(m段最大和)

    Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To b ...

  8. pycharm安装TensorFlow

    一.首先说下我在安装TensorFlow的过程中遇到的坑: 1.python的版本是3.5的版本,因为TensorFlow好像只支持到3.5现在.然后python需要安装64位的安装包,如果安装的是3 ...

  9. js 获取对象属性个数

    js 获取对象属性个数 方法一: var attributeCount = function(obj) { var count = 0; for(var i in obj) { if(obj.hasO ...

  10. 为什么要用PolyFill(JS中的修补匠)

    var users = [{name:"zhangsan",age:18},{name:"jack",age:20}]; 这是一个对象数组.如果我们要查询名字为 ...