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 ...
随机推荐
- android异常之emulator-arm.exe已停止工作
我遇到的这个问题通过降低了AVD的分辨率后解决了,估计是电脑的显卡不行.
- 处理 InnerException 最佳方案?
如何获取 innerException 内部错误信息 String innerMessage = (ex.InnerException != null) ? ex.InnerException.Mes ...
- Android 子线程中进行UI操作遇到的小问题
今天在学习<第一行Android代码>第9章-子线程进行UI操作时遇到了一些问题. 代码是这样的: ... import java.util.logging.Handler; ... pu ...
- MFC一个令人纠心的错误
IDE生成的代码,运行几次之后开始出现以下这个错误 Error: must call SetScrollSizes() or SetScaleToFitSize() before painting s ...
- hdu Co-prime
题意:求出在一个区间[A,B]内与N互质的个数 . 思路: 先求出n的质因子,然后求出与N的质因子不互质的个数然后总个数减去就是.用位运算二进制表示那个因子用到过,实现容斥原理.在1到n之间是c倍数的 ...
- PYTHON--定期监测服务器端口,并将结果写入MYSQL
定时监测服务器端口,然后将结果入写数据库. 监测用NC命令,入库就用PYTHON的MYSQL模块 再调一个基于函数的多线程... 妥妥的.. 是网上两个功能的合成.. 俺不生产代码,俺只是BAIDU的 ...
- ISO15693标准详细介绍
1.符合ISO/IEC 15693标准的信号接口部分的性能如下:1.1 工作频率 工作频率为13.56MKz±7KHz1.2 工作场强 工作场的最小值为0.15A/m,最大场为5A/m.1.3 调制 ...
- BZOJ2442: [Usaco2011 Open]修剪草坪
2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 500 Solved: 244[Submit][ ...
- 深入JS系列学习3
深入JS系列学习3 深入理解JavaScript系列(9):根本没有"JSON对象"这回事! 很多JavaScript开发人员都错误地把JavaScript对象字面量(Object ...
- Android的布局优化之include、merge 、viewstub
以前在写布局的时候总是喜欢用自己熟悉的方式去写,从来也没有想过优化怎么的,后来又一次在上班的时候老大拿着我写的一个页面说我这个不行.我说这不是和设计图上的一模一样的么?怎么就不行了?然后他就跟我说了一 ...