一、实现方法

//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. Going Home POJ - 2195(费用流)

    就是一个简单题 四个月前a的一道题,今天又看到了,再a一遍吧. 好吧 我想多了 用了bfs求最短路  其实不用的 因为没有障碍物 #include <iostream> #include ...

  2. CF1106F Lunar New Year and a Recursive Sequence

    题目链接:CF1106F Lunar New Year and a Recursive Sequence 大意:已知\(f_1,f_2,\cdots,f_{k-1}\)和\(b_1,b_2,\cdot ...

  3. MT【299】对数型数列不等式

    已知数列$\{\dfrac{1}{n}\}$的前$n$项和为$S_n$,则下面选项正确的是(      )A.$S_{2018}-1>\ln 2018$B.$S_{2018}-1<\ln ...

  4. 「CF838B」 Diverging Directions

    B. Diverging Directions 题意 给出一个n个点2n-2条边的有向图.n-1条指向远离根方向的边形成一棵树,还有n-1条从非根节点指向根节点的边. q次操作,1修改第x条边权值为y ...

  5. NORMA2 - Norma [cdq分治]

    题面 洛谷 你有一个长度为n的序列,定义这个序列中每个区间的价值是 \(Cost(i,j)=Min(Ai...Aj)∗Max(Ai...Aj)∗(j−i+1)Cost(i,j)=Min(A_{i}.. ...

  6. 在 CentOS 上编写 init.d service script [转]

    背景:之前编写了一些脚本,下载了一些开源软件,想把它们做成系统服务,通过 service your_prog_name start 这样的方式来后台运行,并在开机时自动启动.在了解了 daemon 命 ...

  7. Hdoj 1905.Pseudoprime numbers 题解

    Problem Description Fermat's theorem states that for any prime number p and for any integer a > 1 ...

  8. BZOJ5262(容斥)

    题目描述 听着自己美妙的曲子,小Z进入了梦乡.在梦中,小Z仿佛又回到了自己纵横考场的年代.在梦中,小Z参加了一场 考试,这场考试一共有n道题,每道题的最终得分都是一个大于等于0的整数.然而醒来后,小Z ...

  9. shell中的source和直接执行sh的区别

    首先我们知道我们执行shell有这么几种方法 1. sh/bash使用其内置的命令集来执行一些命令,例如如下 sh demo.sh bash demo.sh 2. 使用./或者/$SHELLPATH/ ...

  10. 51nod1079 poj2891 中国剩余定理与其扩展

    题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1079 一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K. ...