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 ...
随机推荐
- Chrome不支持本地Ajax请求解决?
今天用JQuery操作Ajax时,使用load方法加载html块 结果提示: XMLHttpRequest cannot load file~~~~~~~Origin 'null' is theref ...
- jquery 节点操作大全
$para.attr("title"); 实例: <script type="text/javascript"> //<![CDATA[ $( ...
- saas系统架构经验总结
2B Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...
- codevs 1709 钉子和小球
1709 钉子和小球 1999年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果题目描述 Description有一个三角形木板 ...
- MySQL重置root密码的几种方法(windows+Linux)
重置root密码的方法: windows系统下:1.停止mysql服务:2.新建文件init-root.txt,写上如下内容: update mysql.user set password = pas ...
- HID燈是什么及其工作原理
HID為HighIntensityDischarge的縮寫,即高壓氣體放電燈,它發光的原理是將12V電壓增壓至23000V的超高電壓,激穿填充在石英管的氙氣,使它發光.然后再將電壓轉成85V左右,穩定 ...
- MyEclipse10 中增加svn插件
http://www.cnblogs.com/bluesky4485/archive/2012/04/23/2467177.html 确实这种方法可行!向牛人学习!
- RR 和RC隔离问题
Sesssion 1: mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +--------------- ...
- <<开源硬件创客 15个酷应用玩转树莓派>>
本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派的前世今生,掌握树莓派基本的使用方法.第4~18章主要介绍15个以树莓派为载体的酷炫应用,大家可以按 ...
- STL——heap的4大操作
STL的堆操作 STL里面的堆操作一般用到的只有4个:make_heap();.pop_heap();.push_heap();.sort_heap(); 他们的头文件函数是#include < ...