C# Html网页生成图片解决方案1

摘要:
1.使用System.Windows下的WebBrowser控件。表单命名空间以加载网页并生成图像GiHub引用地址:https://github.com/tianma3798/FileOparate/用法:publicstaticvoidTestOne(){ThumbnailImgimg=newThumbnalImg(“e:one.png”);//img.SetToJpeg()//

1.使用System.Windows.Forms命名空间下的WebBrowser控件加载网页并生成图片

GiHub参考地址:

https://github.com/tianma3798/FileOparate/

使用方法:

public static voidTestOne()
{
    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 classThumbnail
    {
        /// <summary>
        ///网页生成的图片
        /// </summary>
        privateBitmap _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, intbrowserWidth)
        {
            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, inttHeight)
        {
            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, inttHeight)
        {
            Thumbnail thumb = newThumbnail(url, browserWidth, browserHeight, tWidth, tHeight);
            returnthumb.GenerateImage();
        }
        /// <summary>
        ///生成图片信息
        /// </summary>
        /// <returns></returns>
        publicBitmap GenerateImage()
        {
            Thread thread = new Thread(newThreadStart(_GenerateImage));
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            thread.Join();
            return_bitmap;
        }
        /// <summary>
        ///使用WebBrowser生成图片
        /// </summary>
        private void_GenerateImage()
        {
            WebBrowser browser = newWebBrowser();
            browser.ScrollBarsEnabled = false;
            browser.ScriptErrorsSuppressed = false;
            browser.Navigate(_url);
            browser.DocumentCompleted += newWebBrowserDocumentCompletedEventHandler(_DocumentCompleted);
            while (browser.ReadyState !=WebBrowserReadyState.Complete)
                Application.DoEvents();
            browser.Dispose();
        }
        /// <summary>
        ///页面加载完成事件
        /// </summary>
        private void _DocumentCompleted(objectsender, WebBrowserDocumentCompletedEventArgs e)
        {
            WebBrowser browser = sender asWebBrowser;
            if(IsCustumer)
            {
                //生成自定义宽度和高度的图片
                browser.ClientSize = newSize(_browserWidth, _browserHeight);
                _bitmap = newBitmap(browser.Bounds.Width, browser.Bounds.Height);
                browser.DrawToBitmap(_bitmap, browser.Bounds);
                _bitmap = (Bitmap)_bitmap.GetThumbnailImage(_tWidth, _tHeight, null, IntPtr.Zero);
            }
            else
            {
                //生成默认body宽度和高度的图片(最常用)
                _browserHeight = 5000;
                if (browser.Document.Body != null)
                {
                    _browserHeight =browser.Document.Body.OffsetRectangle.Height;
                    browser.ClientSize = newSize(_browserWidth, _browserHeight);
                    Rectangle bodyRect =browser.Document.Body.OffsetRectangle;
                    _bitmap = newBitmap(_browserWidth, bodyRect.Height);
                    browser.BringToFront();
                    browser.DrawToBitmap(_bitmap, bodyRect);
                    _bitmap = (Bitmap)_bitmap.GetThumbnailImage(_browserWidth, bodyRect.Height, null, IntPtr.Zero);
                }
                else
                {
                    browser.ClientSize = newSize(_browserWidth, _browserHeight);
                    _bitmap = newBitmap(_browserWidth, _browserHeight);
                    browser.BringToFront();
                    browser.DrawToBitmap(_bitmap, new Rectangle(0,0,_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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用kettle实现最基础的数据表同步斯坦福大学自然语言处理第五课“拼写纠错(Spelling Correction)”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Web Worker javascript多线程编程(一)

什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验。 一般来说Javascript和UI页面会共用一个线程,在HTML页面中执行js脚本时,页面的状态是不可响应的,直到脚本已完成。而这段代码可以交给Web Worker在后台运行,那么页面在...

Android Glide加载视频封面

/** *   context 上下文 *   uri 视频地址 *   imageView 设置image *   frameTimeMicros 获取某一时间帧 */ public void loadVideoScreenshot(final Context context, String ur...

html 常用代码块

解决外边框不计入div尺寸的代码-moz-box-sizing: border-box;box-sizing: border-box;-webkit-box-sizing: border-box;手指按下有外边框的问题-webkit-tap-highlight-color:rgba(255,0,0,0);透明代码filter:alpha(opacity=5...

Android学习分享:执行某ViewGroup的动画时,子控件太多导致动画执行卡顿的问题

最近在项目中遇到一个问题,我有一个LinearLayout,里面装载了许多ImageView控件,ImageView控件显示着自己的图片,这个LinearLayout支持双指缩放,缩放采用ScaleAnimation来实现,但是但是在缩放过程中,屏幕十分卡顿,缩放效果根本没有跟上手指的缩放动作。后来在Google上查了一番,查到一个API,叫setAnim...

html之间传递参数

转自:http://blog.163.com/yangzhanghui_job/blog/static/179575062201271624839972/ aa.html 往 bb.html 传参 aa.html 文件代码: <html> <head> </head> <body> <script>...

jQuery基础【1】

jQuery 是一个“写的更少,但做的更多”的轻量级 JavaScript 库。jQuery 极大地简化了 JavaScript 编程。jQuery 很容易学习。jQuery 库位于一个 JavaScript 文件中,其中包含了所有的 jQuery 函数。jQuery 是一个 JavaScript 函数库。jQuery 库包含以下特性:   •HTML 元...