• ASP.NET根据URL生成网页缩略图示例程序(C#语言)


    工作中可能马上要用到根据URL生成网页缩略图功能,提前做好准备。

    在网上找了份源码,但是有错误:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a9”,解决后运行良好,记录在此备用!

    起始页:Default.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CaptureToImage._Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
      <title>Snap</title>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
      <input type="button" onclick="window.open('Snap.aspx?url=www.njude.com.cn')" value="生成网页缩略图"/>
      </div>
      </form>
    </body>
    </html>

    调用页:Snap.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Snap.aspx.cs" Inherits="CaptureToImage.Snap" AspCompat="true" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
       
        </div>
        </form>
    </body>
    </html>

    PS:红色字体部分是为解决错误增加的代码,强制程序在单线程环境下运行!

    调用页:Snap.aspx.cs

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Drawing.Imaging;

    namespace CaptureToImage
    {
        public partial class Snap : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                string url = string.Empty;
                url = Request.QueryString[0];
                try
                {
                    GetImage thumb = new GetImage(url, 1024, 768, 800, 600);
                    System.Drawing.Bitmap x = thumb.GetBitmap();
                    x.Save(Response.OutputStream, ImageFormat.Jpeg);
                    Response.ContentType = "image/jpeg";
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
            }
        }
    }

    类文件:GetImage.cs

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Windows.Forms;
    using System.Web.UI;

    namespace CaptureToImage
    {
        public class GetImage
        {
            int S_Height;
            int S_Width;
            int F_Height;
            int F_Width;
            string MyURL;

            public int ScreenHeight
            {
                get
                {
                    return S_Height;
                }
                set
                {
                    S_Height = value;
                }
            }

            public int ScreenWidth
            {
                get
                {
                    return S_Width;
                }
                set
                {
                    S_Width = value;
                }
            }

            public int ImageHeight
            {
                get
                {
                    return F_Height;
                }
                set
                {
                    F_Height = value;
                }
            }

            public int ImageWidth
            {
                get
                {
                    return F_Width;
                }
                set
                {
                    F_Width = value;
                }
            }

            public string WebSite
            {
                get
                {
                    return MyURL;
                }
                set
                {
                    MyURL = value;
                }
            }

            public GetImage(string WebSite, int ScreenWidth, int ScreenHeight, int ImageWidth, int ImageHeight)
            {
                this.WebSite = WebSite;
                this.ScreenHeight = ScreenHeight;
                this.ScreenWidth = ScreenWidth;
                this.ImageHeight = ImageHeight;
                this.ImageWidth = ImageWidth;
            }
            [STAThread]
            public Bitmap GetBitmap()
            {
                WebPageBitmap Shot = new WebPageBitmap(this.WebSite, this.ScreenWidth, this.ScreenHeight);

                Shot.GetIt();
                Bitmap Pic = Shot.DrawBitmap(this.ImageHeight, this.ImageWidth);
                return Pic;
            }
        }

        public class WebPageBitmap
        {
            WebBrowser MyBrowser;
            string URL;
            int Height;
            int Width;

            public WebPageBitmap(string url, int width, int height)
            {
                this.URL = url;
                this.Width = width;
                this.Height = height;
                MyBrowser = new WebBrowser();
                MyBrowser.ScrollBarsEnabled = false;
                MyBrowser.Size = new Size(this.Width, this.Height);
            }

            public void GetIt()
            {
                NavigateUrl(this.URL);
                while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)
                {
                    Application.DoEvents();
                }
            }

            public delegate void DelUserHandler(string url);

            public void NavigateUrl(string url)
            {
                try
                {
                    if (this.MyBrowser.InvokeRequired)
                    {
                        DelUserHandler handler = new DelUserHandler(NavigateUrl);
                        MyBrowser.Invoke(handler, url);
                    }
                    else
                    {
                        this.MyBrowser.Navigate(url);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("NavigateUrl()" + ex.Message);
                }
            }
            public Bitmap DrawBitmap(int theight, int twidth)
            {
                Bitmap myBitmap = new Bitmap(this.Width, this.Height);
                Rectangle DrawRect = new Rectangle(0, 0, this.Width, this.Height);
                MyBrowser.DrawToBitmap(myBitmap, DrawRect);
                System.Drawing.Image imgOutput = myBitmap;
                System.Drawing.Bitmap oThumbNail = new Bitmap(twidth, theight, imgOutput.PixelFormat);
                Graphics g = Graphics.FromImage(oThumbNail);

                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;

                Rectangle oRectangle = new Rectangle(0, 0, twidth, theight);
                g.DrawImage(imgOutput, oRectangle);

                try
                {
                    return oThumbNail;
                }
                catch
                {
                    return null;
                }
                finally
                {
                    imgOutput.Dispose();
                    imgOutput = null;
                    MyBrowser.Dispose();
                    MyBrowser = null;
                }

            }
        }
    }

    PS:项目中需要添加引用System.Windows.Forms

  • 相关阅读:
    《javascript高级程序设计》第六章总结
    电子邮件写信页面开发代码
    JSON和XML的比较
    2014前端工程师基础课程作业
    cookie 和session 的区别详解
    substring()、slice()和substr()方法辨析
    Number()、parseInt()和parseFloat()辨析
    《javascript高级程序设计》第十三章知识点
    angular debounce 搜索去抖动/防抖
    js四舍五入保留两位小数的方法
  • 原文地址:https://www.cnblogs.com/guoxiaowen/p/2353900.html
Copyright © 2020-2023  润新知