通常浏览器都有将网页生成图片的功能,本文实例讲述了Winform实现将网页生成图片的方法。分享给大家供大家参考。具体方法如下:
工具截图如下:
生成后的图片如下:
手动填写网站地址,可选择图片类型和保持图片地址,来生成页面的图片,当图片路径未选择时则保存桌面;
具体代码如下:
将html生成图片的类
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Imaging; using System.Runtime.InteropServices; using System.Security; namespace Print { public class Test { public static Bitmap GetHtmlImage(Uri UrlString, int Width) { WebBrowser MyControl = new WebBrowser(); MyControl.Size = new Size(Width, 10); MyControl.Url = UrlString; while (MyControl.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } MyControl.Height = MyControl.Document.Body.ScrollRectangle.Height + 20; MyControl.Url = UrlString; WebControlImage.Snapshot snap = new WebControlImage.Snapshot(); Bitmap MyImage = snap.TakeSnapshot(MyControl.ActiveXInstance, new Rectangle(0, 0, MyControl.Width, MyControl.Height)); MyControl.Dispose(); return MyImage; } /// /// WebBrowser获取图形 /// private class WebControlImage { internal static class NativeMethods { [StructLayout(LayoutKind.Sequential)] public sealed class tagDVTARGETDEVICE { [MarshalAs(UnmanagedType.U4)] public int tdSize; [MarshalAs(UnmanagedType.U2)] public short tdDriverNameOffset; [MarshalAs(UnmanagedType.U2)] public short tdDeviceNameOffset; [MarshalAs(UnmanagedType.U2)] public short tdPortNameOffset; [MarshalAs(UnmanagedType.U2)] public short tdExtDevmodeOffset; } [StructLayout(LayoutKind.Sequential)] public class COMRECT { public int left; public int top; public int right; public int bottom; public COMRECT() { } public COMRECT(Rectangle r) { this.left = r.X; this.top = r.Y; this.right = r.Right; this.bottom = r.Bottom; } public COMRECT(int left, int top, int right, int bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; } public static NativeMethods.COMRECT FromXYWH(int x, int y, int width, int height) { return new NativeMethods.COMRECT(x, y, x + width, y + height); } public override string ToString() { return string.Concat(new object[] { "Left = ", this.left, " Top ", this.top, " Right = ", this.right, " Bottom = ", this.bottom }); } } [StructLayout(LayoutKind.Sequential)] public sealed class tagLOGPALETTE { [MarshalAs(UnmanagedType.U2)] public short palVersion; [MarshalAs(UnmanagedType.U2)] public short palNumEntries; } } public class Snapshot { /// /// ?煺? /// /// Com 对象 /// 图象大小 /// public Bitmap TakeSnapshot(object pUnknown, Rectangle bmpRect) { if (pUnknown == null) return null; //必须为com对象 if (!Marshal.IsComObject(pUnknown)) return null; //IViewObject 接口 UnsafeNativeMethods.IViewObject ViewObject = null; IntPtr pViewObject = IntPtr.Zero; //内存图 Bitmap pPicture = new Bitmap(bmpRect.Width, bmpRect.Height); Graphics hDrawDC = Graphics.FromImage(pPicture); //获取接口 object hret = Marshal.QueryInterface(Marshal.GetIUnknownForObject(pUnknown), ref UnsafeNativeMethods.IID_IViewObject, out pViewObject); try { ViewObject = Marshal.GetTypedObjectForIUnknown(pViewObject, typeof(UnsafeNativeMethods.IViewObject)) as UnsafeNativeMethods.IViewObject; //调用Draw方法 ViewObject.Draw((int)System.Runtime.InteropServices.ComTypes.DVASPECT.DVASPECT_CONTENT, -1, IntPtr.Zero, null, IntPtr.Zero, hDrawDC.GetHdc(), new NativeMethods.COMRECT(bmpRect), null, IntPtr.Zero, 0); } catch (Exception ex) { Console.WriteLine(ex.Message); throw ex; } //释放 hDrawDC.Dispose(); return pPicture; } } [SuppressUnmanagedCodeSecurity] internal static class UnsafeNativeMethods { public static Guid IID_IViewObject = new Guid("{0000010d-0000-0000-C000-000000000046}"); [ComImport, Guid("0000010d-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IViewObject { [PreserveSig] int Draw([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] NativeMethods.tagDVTARGETDEVICE ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [In] NativeMethods.COMRECT lprcBounds, [In] NativeMethods.COMRECT lprcWBounds, IntPtr pfnContinue, [In] int dwContinue); [PreserveSig] int GetColorSet([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] NativeMethods.tagDVTARGETDEVICE ptd, IntPtr hicTargetDev, [Out] NativeMethods.tagLOGPALETTE ppColorSet); [PreserveSig] int Freeze([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [Out] IntPtr pdwFreeze); [PreserveSig] int Unfreeze([In, MarshalAs(UnmanagedType.U4)] int dwFreeze); void SetAdvise([In, MarshalAs(UnmanagedType.U4)] int aspects, [In, MarshalAs(UnmanagedType.U4)] int advf, [In, MarshalAs(UnmanagedType.Interface)] System.Runtime.InteropServices.ComTypes.IAdviseSink pAdvSink); void GetAdvise([In, Out, MarshalAs(UnmanagedType.LPArray)] int[] paspects, [In, Out, MarshalAs(UnmanagedType.LPArray)] int[] advf, [In, Out, MarshalAs(UnmanagedType.LPArray)] System.Runtime.InteropServices.ComTypes.IAdviseSink[] pAdvSink); } } } } }
winfrom后台处理方面代码如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Imaging; namespace Excel文件处理 { public partial class Html : Form { public Html() { InitializeComponent(); } private string ImageUrl = "";//图片地址 private string ImageName = "";//图片名称 private void button1_Click(object sender, EventArgs e) { string HtmlUrl = this.Txt_Url.Text.Trim(); if (HtmlUrl=="") { MessageBox.Show("请输入网址"); return; } if (ImageUrl.Trim()=="") { ImageUrl = @"C:\Users\Administrator\Desktop"; } try { Uri ri = new Uri(this.Txt_Url.Text); Bitmap bit = Print.Test.GetHtmlImage(ri, 1200); ImageName = this.Txt_Name.Text.Trim();//图片名称 if (ImageName != "") { if (ImageName.IndexOf('.') != -1) {//当用户输入图片后缀时,将后缀截取 ImageName.Substring(0, ImageName.LastIndexOf('.')); } } else ImageName = DateTime.Now.Ticks.ToString();//时间名称 switch (this.comboBox1.SelectedText) { case "GIF": ImageUrl += "\\" + ImageName + ".gif"; break; case "JPG": ImageUrl += "\\" + ImageName + ".jpg"; break; case "PNG": ImageUrl += "\\" + ImageName + ".png"; break; default: ImageUrl += "\\" + ImageName + ".png"; break; } switch (this.comboBox1.SelectedText) { case "GIF": bit.Save(ImageUrl, ImageFormat.Gif); break; case "JPG": bit.Save(ImageUrl, ImageFormat.Jpeg); break; case "PNG": bit.Save(ImageUrl, ImageFormat.Png); break; default: bit.Save(ImageUrl, ImageFormat.Png); break; } bit = null; ImageUrl = "";//图片地址 ImageName = "";//图片名称 MessageBox.Show("生产成功"); } catch { MessageBox.Show("网址输入有误!"); return; } } private void button2_Click(object sender, EventArgs e) { //获取保存路径 if (this.folderBrowserDialog1.ShowDialog()==DialogResult.OK) { if (this.folderBrowserDialog1.SelectedPath.Trim()!="") { ImageUrl = folderBrowserDialog1.SelectedPath; this.label6.Text = ImageUrl; } } } } }
希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍C#实现将网页保存成图片的网页拍照功能,包括了C#实现将网页保存成图片的网页拍照功能的使用技巧和注意事项,需要的朋友参考一下 本文实例主要实现了网页照相机程序的功能。C#实现将网页保存成图片格式,简单实现网页拍照,主要是基于ActiveX 组件的网页快照类,AcitveX 必须实现 IViewObject 接口。因此读者完全可扩展此类将其用于你的C#软件项目中。在此特别感谢作者:随飞
本文向大家介绍使用vue实现HTML页面生成图片的方法,包括了使用vue实现HTML页面生成图片的方法的使用技巧和注意事项,需要的朋友参考一下 随着网络的发展,越来越多的网络平台应运而生。如何获得更多的流量,吸引更多的眼球已经成为网络平台生存、发展的必要条件。现在网络平台最常见的一种宣传方式就是人邀人。 我最近就接到一个需求,做一个 海报页面,并且能保存到手机 ,方便用户分享给朋友,希望能够达到人
本文向大家介绍C#实现Winform中打开网页页面的方法,包括了C#实现Winform中打开网页页面的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现Winform中打开网页页面的方法。分享给大家供大家参考。具体实现方法如下: 1、首先比较简单的我们知道有类似的方法如下 2、比较灵活一点,可以定义窗口大小,我们要实现网页中脚本打开页面的方法,即window.open 那么,我们
本文向大家介绍Winform下实现图片切换特效的方法,包括了Winform下实现图片切换特效的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Winform下实现图片切换特效的方法,是应用程序开发中非常实用的一个功能。分享给大家供大家参考之用。具体方法如下: 本实例源自网络,功能较为齐全、丰富!主要功能代码如下: 另外还有一种调用API实现的特效: 希望本文所述实例对大家C#程序设计有
本文向大家介绍基于linnux+phantomjs实现生成图片格式的网页快照,包括了基于linnux+phantomjs实现生成图片格式的网页快照的使用技巧和注意事项,需要的朋友参考一下 安装扩展: (1)下面是我在linux上的安装过程,如果没有安装git请先yum install git 安装casperjs (2)安装phantomjs,下载地址: http://ph
本文向大家介绍写一个方法将html页面生成为图片相关面试题,主要包含被问及写一个方法将html页面生成为图片时的应答技巧和注意事项,需要的朋友参考一下 打开控制台, 打开控制台,输入 想要哪种截图,任君选择。