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 ...
随机推荐
- table 表格隔行换色实现
table 表格隔行换色实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- sort对二维字符数组排序(转)
由于二维字符数组的第二维没有赋值运算符,即不能对整个一维数组进行赋值,因此是无法直接对二维数组用sort进行排序的,解决办法有二种: 代码一: #include <iostream> #i ...
- TCP回射客户程序:main函数
创建套接字,装填网际网套接字地址结构 创建一个TCP套接字,用服务器的IP地址和端口号装填一个网际网套接字地址结构 我们可从命令行参数取得服务器的IP地址 从头文件unp.h取得服务器的众所周知端口号 ...
- 如何使用Instruments诊断App(Swift版):起步-b
无论你写过许多iOS应用,还是刚刚开始你的第一个应用,毫无疑问,你都会想出一些新点子,或者想去弄明白你该怎么做,来让你的app变得更好. 除去添加新特性来优化你的应用,有一件事是所有好的开发者都回去做 ...
- sqlserver中Profiler的使用
1.单击开始--程序--Microsoft SQL Server 2008--性能工具--SQL Server Profiler,如下图: 2.然后进入SqlServ ...
- allegro 的光绘层概念
TOP层: board geometry/outline manufacturing/photoplot_outline etch/top ...
- Seek the Name, Seek the Fame
poj2752:http://poj.org/problem?id=2752 题意:给你一个串,让你求前n个字符和后n个字符相同的n有多少,从小到大输出来. 题解:这一题要深刻理解KMP的next数组 ...
- linux wenjian
文件锁是一种文件读写机制,在任何特定的时间只允许一个进程访问一个文件.利用这种机制能够使读写单个文件的过程变得更安全. 在这篇文章中,我们将探讨Linux中不同类型的文件锁,并通过示例程序来理解它们之 ...
- Currency Exchange(判断是否有正环)
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16456 Accepted: 5732 Description Seve ...
- mklink命令转移win7系统盘文件夹users和programdata(附xp的方法)
mklink命令转移win7系统盘文件夹users和programdata(附xp的方法) 使用mklink命令转移文件夹清理臃肿的c盘 (一) 我的 ...