C# Html网页生成图片解决方案1
1.使用System.Windows.Forms命名空间下的WebBrowser控件加载网页并生成图片
GiHub参考地址:
https://github.com/tianma3798/FileOparate/
使用方法:
public static void TestOne()
{
ThumbnailImg img = new ThumbnailImg("e:\\one.png");
//img.SetToJpeg();
//img.SetToGif();
ThumbnailOperate _operate = new ThumbnailOperate("http://korea.weilanliuxue.cn", img);
_operate.GenerateImg();
Console.WriteLine("保存成功");
}
核心代码类:
/// <summary>
/// 网页生成生成图片帮助类
/// </summary>
public class Thumbnail
{
/// <summary>
/// 网页生成的图片
/// </summary>
private Bitmap _bitmap;
private string _url;
private int _browserWidth, _browserHeight, _tWidth, _tHeight;
/// <summary>
/// 是否使用,指定的宽度和高度
/// </summary>
public bool IsCustumer { get; set; }
/// <summary>
/// 指定网页地址,使用页面的body的高度
/// 生成图片的,宽度和高度与body相同
/// </summary>
/// <param name="url">网页地址</param>
/// <param name="browserWidth">浏览器宽度</param>
public Thumbnail(string url, int browserWidth)
{
IsCustumer = false;
_url = url;
_browserWidth = browserWidth;
}
/// <summary>
/// 初始化构造
/// </summary>
/// <param name="url">网页地址</param>
/// <param name="browserWidth">浏览器宽度</param>
/// <param name="browserHeight">浏览器高度</param>
/// <param name="tWidth">生成图片宽度</param>
/// <param name="tHeight">生成图片高度</param>
public Thumbnail(string url, int browserWidth, int browserHeight, int tWidth, int tHeight)
{
IsCustumer = true;
_url = url;
_browserWidth = browserWidth;
_browserHeight = browserHeight;
_tWidth = tWidth;
_tHeight = tHeight;
}
/// <summary>
/// 获取网页的图片
/// </summary>
/// <param name="url">网页地址</param>
/// <param name="browserWidth">浏览器宽度</param>
/// <param name="browserHeight">浏览器高度</param>
/// <param name="tWidth">生成图片宽度</param>
/// <param name="tHeight">生成图片高度</param>
public static Bitmap GetThumbnail(string url, int browserWidth, int browserHeight, int tWidth, int tHeight)
{
Thumbnail thumb = new Thumbnail(url, browserWidth, browserHeight, tWidth, tHeight);
return thumb.GenerateImage();
}
/// <summary>
/// 生成图片信息
/// </summary>
/// <returns></returns>
public Bitmap GenerateImage()
{
Thread thread = new Thread(new ThreadStart(_GenerateImage));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
return _bitmap;
}
/// <summary>
/// 使用WebBrowser生成图片
/// </summary>
private void _GenerateImage()
{
WebBrowser browser = new WebBrowser();
browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = false;
browser.Navigate(_url);
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(_DocumentCompleted);
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
browser.Dispose();
}
/// <summary>
/// 页面加载完成事件
/// </summary>
private void _DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = sender as WebBrowser;
if (IsCustumer)
{
//生成自定义宽度和高度的图片
browser.ClientSize = new Size(_browserWidth, _browserHeight);
_bitmap = new Bitmap(browser.Bounds.Width, browser.Bounds.Height);
browser.DrawToBitmap(_bitmap, browser.Bounds);
_bitmap = (Bitmap)_bitmap.GetThumbnailImage(_tWidth, _tHeight, null, IntPtr.Zero);
}
else
{
//生成默认body宽度和高度的图片(最常用)
_browserHeight = ;
if (browser.Document.Body != null)
{
_browserHeight = browser.Document.Body.OffsetRectangle.Height;
browser.ClientSize = new Size(_browserWidth, _browserHeight);
Rectangle bodyRect = browser.Document.Body.OffsetRectangle;
_bitmap = new Bitmap(_browserWidth, bodyRect.Height);
browser.BringToFront();
browser.DrawToBitmap(_bitmap, bodyRect);
_bitmap = (Bitmap)_bitmap.GetThumbnailImage(_browserWidth, bodyRect.Height, null, IntPtr.Zero);
}
else
{
browser.ClientSize = new Size(_browserWidth, _browserHeight);
_bitmap = new Bitmap(_browserWidth, _browserHeight);
browser.BringToFront();
browser.DrawToBitmap(_bitmap, new Rectangle(,,_browserWidth,_browserHeight));
_bitmap = (Bitmap)_bitmap.GetThumbnailImage(_browserWidth, _browserHeight, null, IntPtr.Zero);
} //_bitmap = (Bitmap)_bitmap.GetThumbnailImage(bodyRect.Width, bodyRect.Height, null, IntPtr.Zero);
}
}
}
C# Html网页生成图片解决方案1的更多相关文章
- Winform将网页生成图片
今天无意见看到浏览器有将网页生成图片的功能,顿时赶脚很好奇,于是就找了找资料自己做了一个类似的功能. 工具截图:生成后的图片 手动填写网站地址,可选择图片类型和保持图片地址,来生成页面的图片,当图片路 ...
- 70.JS---利用原生js做手机端网页自适应解决方案rem布局
利用原生js做手机端网页自适应解决方案rem布局 刚开始我用的是下面这段代码,然后js通过外部链接引入,最后每次用手机刷新网页的时候都会出现缩略图 function getRem(pwidth, pr ...
- JS 网页打印解决方案
这些日子真是太忙了,项目太多了公司总是加班,而且这些项目中好多都用到的打印,所以学习了一段时间js的打印. 其实原来只是用到了简单的功能,现在要深入的了解才发现原来ie的网页打印也是如此的强大. 以下 ...
- php中网页生成图片的方式
在网上找了很多方法,发现与自己最初的思路也是大同小异,那就是HTML——>PDF——>JPG.从上午9点钟一直搞到下午6点钟,代码方面其实很简单,更多的还是环境和PHP拓展上面,忙了一天的 ...
- WinForm嵌入Web网页的解决方案
企业级信息化系统绝大部分采用BS架构实现,如门户网站.OA系统.电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无 ...
- 网页转图片,html生成图片,网页生成图片(基于linnux+phantomjs)和wkhtmltoimage
安装扩展: (1)下面是我在linux上的安装过程,如果没有安装git请先yum install git 安装casperjs cd / git clone git://githu ...
- Edge 通过代理无法打开网页,解决方案
netsh winhttp import proxy source=ie
- C# WebBrowser控件使用整理
一.简介 WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装. 托管包装使您可以在 Windows 窗体客户端应用程序中显示网页. 使用WebBrowser 控件, ...
- html2canvas.js网页截图功能
需求:将网页生成图片,用户自行长按图片进行保存图片,再分享朋友圈.其中,都可识别图中的二维码.(二维码过小会识别不出) 首先,先来科普一下微信网页识别二维码原理:截屏识别,当客户端发现用户在网页的im ...
随机推荐
- Extjs之遍历Store内的数据
Store作为数据的载体,通过下面的方法可以获得Store内的数据; Ext.define('haomlGeimjTongjGrid_store_data', { extend: 'Ext.data. ...
- js中的 window.location、document.location、document.URL 对像的区别(转载)
原文:http://www.cr173.com/html/18417_1.html 当我们需要对html网页进行转向的时候或是读取当前网页的时候可以用到下面三个对像: window.location. ...
- 更快的使用你的键盘:AUTOHOTKEY
本文适合于:每天用电脑工作学习的朋友.游戏发烧手指又不灵敏的朋友.希望提高自己使用电脑效率的朋友. 本文将将告诉你AutoHotkey能做什么,并会一步一步地教会你轻易地使用它,但不会教你更多Auto ...
- JQUERY1.9学习笔记 之基本过滤器(九) 小于选择器
小于选择器 jQuery( ":lt(index)" ) jQuery( ":lt(-index)" ) 描述:选择所有小于指定下标的元素. <!DOCT ...
- C语言基础学习运算符-逻辑运算符
逻辑运算符 逻辑运算符是根据表达式的值来返回真值或是假值.C语言中的逻辑运算符就三种,如下表所示: 列如: 更多学习内容,就在码芽网http://www.mayacoder.com/lesson/in ...
- Python学习笔记六--文件和输入输出
6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...
- storm supervisor启动报错java.lang.RuntimeException: java.io.EOFException
storm因机器断电或其他异常导致的supervisor意外终止,再次启动时报错: 1. 2013-09-24 09:15:44,361 INFO [main] daemon.supervisor ( ...
- 2016-12-14jq笔记
1.在jq中声明一个数组的方法有两种: 1.var a=new Array(): 2 var b=[]; (效果一致) 2.bind()和live()的区别 3.animate的用法 4.place ...
- rysnc,scp与bashrc冲突问题
问题是: scp file user@host:dst失败,user用户的bashrc文件中加入了 sudo su -,自动切换到root用户. 症状是输入密码验证失败. rsync, scp是传输文 ...
- 托管host
托管在googlecode的host https://smarthosts.googlecode.com/svn/trunk/hosts