• C#根据URL在线生成网页缩略图


    最近在找C#根据URL生成缩略图的相关资料,转载如下
    哪位仁兄有这方面的源码或开发经验请赐教,本人不胜感激
    我的邮箱zxjyuan@163.com
    原理是通过IE在本地打开目标URL同时截图,
    这种方法都有安全性的问题,如果你为恶意网页生成缩略图,可能就是一场灾难……
    private void OnDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
           WebBrowser browser = (sender as WebBrowser);
         
           if (browser != null)
           {
             mshtml.IHTMLDocument2 document = (browser.Document.DomDocument as mshtml.IHTMLDocument2);
             if (document != null)
             {
               mshtml.IHTMLElement element = (document.body as mshtml.IHTMLElement);
               if (element != null)
               {
                 IHTMLElementRender render = (element as IHTMLElementRender);
                 if (render != null)
                 {
                   using (Graphics graphics = this.CreateGraphics())
                   {
                     IntPtr hdcDestination = graphics.GetHdc();
                     render.DrawToDC(hdcDestination);
                     IntPtr hdcMemory = GDI32.CreateCompatibleDC(hdcDestination);
                     IntPtr bitmap = GDI32.CreateCompatibleBitmap(
                       hdcDestination,
                       browser.ClientRectangle.Width,
                       browser.ClientRectangle.Height
                       );
                   
                     if (bitmap != IntPtr.Zero)
                     {
                       IntPtr hOld = (IntPtr)GDI32.SelectObject(hdcMemory, bitmap);
                       GDI32.BitBlt(
                         hdcMemory,
                         0, 0,
                         browser.ClientRectangle.Width, browser.ClientRectangle.Height,
                         hdcDestination,
                         0, 0,
                         TernaryRasterOperations.SRCCOPY
                         );
                       GDI32.SelectObject(hdcMemory, hOld);
                       GDI32.DeleteDC(hdcMemory);
                       graphics.ReleaseHdc(hdcDestination);
                     
                       SaveThumbnail(Image.FromHbitmap(bitmap));
                     }
                   }
                 }
               }
             }
           }
    }
    从这里获取了内容的话,我们就很容易生成缩略图了,代码如下
    //by crazycoder.cn
    private void SaveThumbnail(Image image)
    {
           if (image != null)
           {//创建一个位图图像
             Bitmap thumbnail = new Bitmap(160, 120, PixelFormat.Format24bppRgb);
             thumbnail.SetResolution(image.HorizontalResolution, image.VerticalResolution);
           
             using (Graphics resize = Graphics.FromImage(thumbnail))
             {
               resize.InterpolationMode = InterpolationMode.HighQualityBicubic;
               resize.DrawImage(image,
                 new Rectangle(0, 0, 160, 120),
                 new Rectangle(0, 0, _webBrowser.ClientRectangle.Width, _webBrowser.ClientRectangle.Height),
                 GraphicsUnit.Pixel);
             }
             thumbnail.Save(_file.FullName, ImageFormat.Png);
           }
    }
    
    下载整个项目代码  CrazyCoder_WebPageToImage.zip
    附:做得比较好的在线生成缩略图的网站
    http://www.wenwenba.com/
    http://www.websnapr.com/
    http://mozshot.nemui.org/
    http://webthumb.bluga.net/home
    
  • 相关阅读:
    带有时间间隔的dp
    单调队列优化dp(捡垃圾的机器人)
    实现技巧
    树形dp(灯与街道)
    括号匹配(数组链表模拟)
    二分,求直线上覆盖所有点的最短时间
    可持久化链表(链式前向星)
    二分图匹配模板题
    网络流,设备、插头和转接器建图(简单map的应用)
    第七周助教总结
  • 原文地址:https://www.cnblogs.com/zxjyuan/p/1275988.html
Copyright © 2020-2023  润新知