aspx抓取指定的网页为图像

 

WebScreen.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebScreen.aspx.cs" Inherits="pages_tool_WebScreen" %>

WebScreen.aspx.cs 

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ZXing.Common;

/// <summary>
/// 工具类:抓取指定的网页为图像
/// 示例1:http://localhost:51169/pages/tool/WebScreen.aspx?page=https://www.baidu.com
/// 示例2: http://localhost:51169/pages/tool/WebScreen.aspx?page=https://www.baidu.com&width=500&delay=4000&scroll=false
/// </summary>
public partial class pages_tool_WebScreen : System.Web.UI.Page
{
    string page = "";       // 待转化为图像的网页 如:https://www.baidu.com
    int delay = 0;          // 延时抓取(毫秒)
    int width = 0;          // 设置图像初始宽度
    int height = 0;         // 设置图像初始高度
    bool scroll = true;     // 是否滚动抓取整个全屏内容
    string filename = "";   // 设置输出时的文件名

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request["page"] != null) page = Request["page"].ToString();
        if (Request["delay"] != null) delay = int.Parse(Request["delay"]);
        if (Request["width"] != null) width = int.Parse(Request["width"]);
        if (Request["height"] != null) height = int.Parse(Request["height"]);
        if (Request["scroll"] != null) scroll = bool.Parse(Request["scroll"]);
        if (Request["filename"] != null) filename = Request["filename"].ToString();
        if(filename.Equals("")) filename = "p" + page.GetHashCode();

        if (!page.Equals(""))
        {
            try
            {
                Bitmap pic = PicHistory.GetHistory(this);
                if (pic == null)
                {
                    pic = WebPageTool.ToBitmap(page, delay, width, height, scroll);  // 抓取网页为图像
                    if (pic != null) PicHistory.SaveHistory(this, pic);
                }

                System.IO.MemoryStream stream = new System.IO.MemoryStream(); // 创建支持存储区的内存流
                pic.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);    // 保存图片

                Response.ClearContent();                // 清空缓冲区
                Response.ContentType = "Image/jpeg";    // 以图像形式输出

                if (!filename.EndsWith(".jpg")) filename += ".jpg";
                Response.AddHeader("Content-Disposition", "filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));    // 设置输出时的文件名
                //Response.AddHeader("Content-Disposition", (isDownload ? "attachment; " : "") + "filename=" + HttpUtility.UrlEncode(reName, System.Text.Encoding.UTF8));   // 下载

                Response.BinaryWrite(stream.ToArray()); // 将流内容输出至Response接收端
            }
            catch (Exception ex) { }
        }
        Response.Write("");
    }
}

public class PicHistory
{
    #region 历史数据处理逻辑

    /// <summary>
    /// 获取history目录
    /// </summary>
    public static string historyDir()
    {
        string dirPath = AppDomain.CurrentDomain.BaseDirectory + "upload\\history\\pic";

        //string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        //string dirPath = Path.Combine(dir, "history");

        if (!Directory.Exists(dirPath)) Directory.CreateDirectory(dirPath);
        return dirPath;
    }

    /// <summary>
    /// 根据id保存历史数据
    /// </summary>
    /// <param name="id"></param>
    /// <param name="data"></param>
    public static void SaveHistory(string id, Bitmap pic)
    {
        string historyPath = Path.Combine(historyDir(), id);
        pic.Save(historyPath, ImageFormat.Jpeg);
    }

    /// <summary>
    /// 获取id对应的历史数据
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public static Bitmap GetHistory(string id)
    {
        string historyPath = Path.Combine(historyDir(), id);
        if (File.Exists(historyPath))
        {
            DateTime now = DateTime.Now;
            long second = now.AddSeconds(1).Ticks - now.Ticks;

            long nowSecond = DateTime.Now.Ticks / 10000000;
            long preSecond = new FileInfo(historyPath).LastWriteTime.Ticks / 10000000;

            if (nowSecond - preSecond > 60 * 60) return null;                 // 若当前时间距离上次修改超出1个小时,则不使用历史数据
            else return Bitmap.FromFile(historyPath) as Bitmap;    // 读取历史数据内容
        }
        return null;
    }

    /// <summary>
    /// 将data保存至_page对应的历史数据中
    /// </summary>
    /// <param name="_page"></param>
    /// <param name="data"></param>
    public static void SaveHistory(Page _page, Bitmap data)
    {
        string url = _page.Request.Url.ToString();
        string id = "p" + url.GetHashCode() + ".jpg";            // 每个页面url对应一个唯一的id

        SaveHistory(id, data);
    }

    /// <summary>
    /// 获取_page对应的历史数据
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public static Bitmap GetHistory(Page _page)
    {
        string url = _page.Request.Url.ToString();
        string id = "p" + url.GetHashCode() + ".jpg";              // 每个页面url对应一个唯一的id

        return GetHistory(id);
    }

    #endregion

}

/// <summary>
/// 抓取网页为图像
/// </summary>
public class WebPageTool
{
    //[STAThread]
    /// <summary>
    /// 将指定网页的内容,转化为Bitmap(支持html网页、aspx网页、vue等复杂script脚本的网页测试WebBrowser不支持)
    /// </summary>
    /// <param name="webUrl">待转化的网页</param>
    /// <param name="delay">设置网页载入耗时,延时毫秒等待载入完成</param>
    /// <param name="initWidth">设置图像的初始宽度</param>
    /// <param name="initHeight">设置图像的初始高度</param>
    /// <returns></returns>
    public static Bitmap ToBitmap(string webUrl, int delay = 0, int initWidth = 0, int initHeight = 0, bool fullScrool = true)
    {
        Bitmap pic = null;

        Thread staThread = new Thread(new ThreadStart(() =>
        {
            // 在单线程单元中,执行网页转图片功能
            pic = (Bitmap)CallStatic(ToolAsm(), "WebPage2Bitmap.WebPageTool", "ToBitmap", true, new object[] { webUrl, delay, initWidth, initHeight, fullScrool });
        }));
        staThread.SetApartmentState(ApartmentState.STA); // 创建一个单线程单元(否则报错:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件)
        staThread.Start();  // 启动线程
        staThread.Join();   // 等待线程执行完成

        return pic;
    }

    #region 工具插件

    /// <summary>
    ///  调用工具中的static方法
    /// </summary>
    /// <param name="assembly">Assembly</param>
    /// <param name="args">参数</param>
    /// <returns></returns>
    private static object CallStatic(Assembly assembly, string classFullName, string methodName, bool IsPublic, object[] args)
    {
        Type type = assembly.GetType(classFullName, true, true);    // 获取入口类 或 entryPoint.DeclaringType

        // 调用程序集的静态方法: Type.InvokeMember
        object obj = type.InvokeMember(methodName, BindingFlags.InvokeMethod | (IsPublic ? BindingFlags.Public : BindingFlags.NonPublic) | BindingFlags.Static, null, null, args);
        return obj;
    }

    /// <summary>
    /// 获取工具的Assembly
    /// </summary>
    /// <returns></returns>
    private static Assembly ToolAsm()
    {
        if (asm == null)
        {
            byte[] data = Str2Bytes.Process(toolData);
            asm = Assembly.Load(data);
        }
        return asm;
    }
    private static Assembly asm = null;
    private static string toolData = "gphmlc4fc7gc6r4c4nkc14gc71kc8qdrnmcqccngclopednkcdgoopedhgikiljfecjcjeirijjeidipecifidiqiqirjgecieihecjejhiqeciliqecg3rhfecipirigiheqcpcpcmegc14hcghc4gocdcfccqpeehrigc16qc4eedcncdcnc4dkc7ic13qfic6ec7gc11dc3ec8ec5gc15gc16kc8ec13fccgckhc4dc5dc9dc5dc13dc23nofhc4grc8gc5fkcfc38ic6oc6kgfgc4doc88ec6kc23kec5gkc22eqjgihjkjgc6dgdic6ec7dkc7ec28ec5iceqjejfjeifc6fkcfc6gc8gc6dmc28gc5gceqjeihioirifc5oc8ic8ec6dqc28gc5gec32rcfhc12gkc7ec3hcckkefc4rodc6dc14pceec4nkc86dffccnccnmcdc5dc4ddccjfdfc5mcmekdgc5mirdhc5mcncidecdekdic5mirdjc5mc3idecdekdkc5mirdlc5mc3gdirqcedirqcddfcnddcnepckcicgirdjc5mc3hdirqcedirqcddfcnddcnepckcichirdlc5mc3idjirdmc5mccekdnc5mdfcodecoekdoc5mcociceirdpc5mccekdnc5mdfcodecoekdoc5mcpenficcekdnc5mdfcodecoekdoc5mcpekdqc5mc3lckhlecdcejc4imhncfecnkcnc4hkimrqcedirqcddfcnddcnepceeneec3iirdrc5mdmffdcclckhlecdcejc4imhncfimrqcgencddjccdfcnddcnepmlciirec6mdgekedc5mdirqcddfcnddcnepckdgdfcmfknnc7iirec6mireec5mirefc5mdfcgcidecgekdic5mirdjc5mc3qcgdirqcddfcnddcnepdccidecgekdkc5mirdlc5mccencqdecgciiregc5mekehc5mccddcgdfchciirec6mireic5mjhcfc5edfcidechekdic5mdechekdkc5mjfejc5mdfcjddcjekekc5mdfckddckirelc5mdfclddcidjdhjqemc5mjqemc5mjqemc5mddcldechdecgjqemc5mdiircfc5ieiddckddclirenc5mccddcjdfcmenccddcmemdqceekeoc5mememceekeoc5mc6emc6dffcceccfoc7ec4ddccjqcdc5gdgrqcddirqcdcockepeeccjecdc4jcpccgc5eekffc5mirfgc5mjffhc5mcmcikccdc5gccjqcdc5gcnenc3jemdffccdc3nc7fc4ddccjqcec5gcmenc3iemeec3ekccec5gemdffccdc3nc7gc4ddccjqcfc5gcmenc3iemhijfclc5iekfjc5mjgchc5ekccfc5gemdqceekfkc5memc14ngc6oqomqrnqcdc6ldc6iohfjljfjgihipeqheihjfirjhjeifihjfeqheihjfirjhjeifihheihidigihjeeoecipjfifirjeioilieeoechiihjejfiliriqfpfgeqfceqfceqfceoecgfjhiojgjhjeihfpiqihjhjgjeidioeoechcjhieioilifgnihjlhgirinihiqfpiefjfjidfhiffhfifdflf3gihfcfkflefhfjljfjgihipeqheihjfirjhjeifihjfeqhejhiqjgilipihheihjfirjhjeifihhfihjgcec22hcgdgghcgdgghcngc6gehfgmgecdc3dc11oc6jifgeqfceqf3cf3dflc9hccioc6lkchc4efjqc5gcic4lgcjc4efhfjgjeiliqijjfc8lkcpc4goc6efh3fccqgcpc4dc7efgjhhglggc6rgcpc5kcfc4efgeioiriec15ec5dhjfpmecdclcdc6rmehffccdic5dc6fec7hc7fc7mc6ddc6fkc7gc6dkc7hc7gc7ec7fc7gc7dc7gc7dc11mc3dc11icckc3jlc3mcclocckjc3qccofccngc3qccplccngc3iccrlccqkc3iccemcddhcdciccqmcdoncdciccrpcdoncdcicceoceoncdcicclncekdceciccoicengceciccppcengceciccrmcengceciccdlcfngceciccfecfngceciccgncfngcecicciicfngcecicckdcfngcecicclmcfoncdciccmqcfoncdciccnocfngceciccphcfngcecic3hcgrecfhrccdlcgc5iccgkcgekcgciccikcgekcgdecclncgkicgdeccmicgkicgdeccpgcgkicgciccdjchjlccdeccfnchkicgdecchcchkicgdeccjgchkicgdecclmchkicgcqccpfchngc3qccpochngc3iccrfchjlc3ic3mcioncdciccdpcioncdciccfgcioncdciccghcioncdcmccjecihmciciccklcirecfciccmiciekcgciccodcijlc3iccoicijlc3iccqmcingcecmccdicjc3jcmccercjc3jcmccgncjkjc11dc11dc3dc6dc3dpccelc3hc3dc3dccmddc5fkccelc7dc3fc6dc3gfccgpc3hc3dc3gc5ddc3ijccgpc3lc3fc3kccddc3lcdffccddccficdfjccddccjmcdhhcchcec9liccomccdfc3dccdieec8kidkpfccdpc3ic10kc3oichqfccedc3iccdqeec8kfdkpfccdpccddcceoeec8lfckgicdfnccddccjgeec8lfckhmcdgc3ddcckneec8lfckiicdghccddcclgeec8lickkmcdhlccdeccodeec8kidkpfccdpccdeccmneec8lddkggcjmeccdec7dcclqcddcdcceccmhcddcdccfccmncddcdccgccnhcddcdcchccoccdccec11eccdc3ncec5eccdkcec5fccdrcecdc3gccekcec5hccfkcec5iccghcecceccjccgpceccecckcchkcec5lccigcecceccmccjccec5dccjnceflccpfccimccglccpfccdpcchdccpfccjicchlccpfccjiccidccpfccjiccilccpfccjiccjdccpfccjiccjlccpfccjicckdccpfccjiccklccpfccjiccldccpfccjiccllccpfccjnccmdccpfccjiccmlccpfccjiccndccpfccjiccnlccpfcckc3olccpfcckiccpdccpfccdpccplccpfccdpccqdccmpcgknccqdccnrcglc3edccomcglhccqlccpocgkiccedccqicglhccqlccrdcgkiccplccrocgjnccrdccecchllccrdccekchlqccplccfechjiccrlccgjchmeccplccihchmiccplcckdchmoc3lcdkqchnec3lcdmichnoccddcdmrchlc3qlccqicglhccedccrdcgkic3lcdofchoeccdlccpfccoiccdlcdqechooccdlcdqochphccelcdrmchplccdlcdrrchpoc3lccpfccdpccfdcdpfccdpccflcdpfccencdglcdpfccdpcchdcdpfccfncdhlcdpfccdpccidcdpfccdpccilcdpkcikjcdilcdrfcilccdelccpfcclicdkdcdpfccmncdldcdhkcjdmceddccpfccdpc3kc3lccifc3kc3pccifc3kccddccifc3eccdhccikccelccnfcdnecdeqccefccinceeqccenccjrceeqccffccjrceeqcclfccqiceeqccgfccinceeqccgncckhceeqccknccppceeqccfnccjrceeqccdnccefceeqcchfccjrceeqccifccjrceeqccincclpceeqccjnccojceeqcckfccpgceglccnfcdnecdifccifccrnccifccinc3dcdifccjfcdfecdkfcckncdkecdkfcckfcdgdcdkfcclfcdkecdmfcckfcdnncdmfcclfcdkecdcpccjc4rccjeccdnccjgccdpccjgccedccjeccqdcclqcdmicddhcecgc3dc3hc3fc6rlccgnc6jecdhc7licdhqc3ec3hc3fc3ec3ic3hc3dc3jc3hc3ec3kc3jc3gkc6dc26elc7gc23dccjc12gc23dccjlc11gc23mccngc11gc23dcckicgc17dc6ihcjc14fogpirigjhioihfqcchjihiehcidijihfegeiljgipidjceqigioiocchjihiehcidijihhgiririocchjihiehcidijihfegeiljgipidjc3hiilihjjgrieimihifjgccheihjfirjhjeifihjfcchjihiehcidijihfegeiljgipidjceqhcjeirjcihjejgilihjfcchfihjgjgiliqijjfccipjfifirjeioiliecchfjljfjgihipccgrieimihifjgcchfjljfjgihipeqgfiriqi3lijjhjeidjgiliriqccgdjcjcioilifidjgiliriqhfihjgjgiliqijjfgeidjfihcchfjljfjgihipeqggjeidjjiliqijccgeiljgipidjc3hgirgeiljgipidjc3eqifjgirjeccheihifjgidiqijioihccggjeidjjcchfjljfjgihipeqheihjfirjhjeifihjfccheihjfirjhjeifihgpidiqidijihjeccjeihjfirjhjeifihgpidiqcchfjljfjgihipeqgjioirieidioiljmidjgiliriqccgfjhiojgjhjeihgliqi3rccjeihjfirjhjeifihgfjhiojgjhjeihccijihjghrheihjfirjhjeifihgpidiqidijihjeccijihjghrgfjhiojgjhjeihccjfihjghrgfjhiojgjhjeihccgfjhiojgjhjeihccigihi3djhiojggliqjfjgidiqifihccijihjghrggihi3djhiojgccggihi3djhiojgccjjihiehhjeioccigihioidjlcciliqiljghjiligjgikcciliqiljggkihilijikjgcciijhioiohfifjeiririocchfjljfjgihipeqhejhiqjgilipiheqgliqjgihjeirjchfihjejiilifihjfccgpidjejfikidiogdjfgdjgjgjeiliejhjgihcchhiqipidiqidijihighgjljcihccigjjggjeidjjgdjfjcihifjgccioiliqigihjkccjcjigdjfjcihifjgccjcjgigccgliqgdjgjgjeiliejhjgihccikigifhgidjeijihjg3ihjiccikigifggjeidjjcciojcjeifgeirjhiqigjfcciojcjeifhjgeirjhiqigjfccjci3qgfiriqjgiliqjhihccigjjgfiriqjgiliqjhihccjiidiojhihcchfjljfjgihipeqhejhiqjgilipiheqhiihjejfiliriqiliqijcchgidjeijihjggijeidipihjjirjeingdjgjgjeiliejhjgihcchfjljfjgihipeqheihi3oihifjgiliriqccgdjfjfihipieiojlhgiljgioihgdjgjgjeiliejhjgihccgdjfjfihipieiojlggihjfifjeiljcjgiliriqgdjgjgjeiliejhjgihccgdjfjfihipieiojlgfiriqi3lijjhjeidjgiliriqgdjgjgjeiliejhjgihccgdjfjfihipieiojlgfiripjcidiqjlgdjgjgjeiliejhjgihccgdjfjfihipieiojlhcjeirigjhifjggdjgjgjeiliejhjgihccgdjfjfihipieiojlgfirjcjljeilijikjggdjgjgjeiliejhjgihccgdjfjfihipieiojlhgjeidigihipidjeingdjgjgjeiliejhjgihccgdjfjfihipieiojlgfjhiojgjhjeihgdjgjgjeiliejhjgihccgfiriphiiljfilieioihgdjgjgjeiliejhjgihccgjjhiliggdjgjgjeiliejhjgihccgdjfjfihipieiojlhiihjejfiliriqgdjgjgjeiliejhjgihccgdjfjfihipieiojlgiilioihhiihjejfiliriqgdjgjgjeiliejhjgihcchfjljfjgihipeqggilidijiqirjfjgilifjfccggihiejhijijidieioihgdjgjgjeiliejhjgihccggihiejhijijiliqijgpirigihjfcchfjljfjgihipeqhejhiqjgilipiheqgfiripjcilioihjehfihjejiilifihjfccgfiripjcilioidjgiliriqheihioidjkidjgiliriqjfgdjgjgjeiliejhjgihcchejhiqjgilipihgfiripjcidjgilieilioiljgjlgdjgjgjeiliejhjgihcchfjljfjgihipeqhjiliqigirj3feqgiirjeipjfcchjihiegejeirj3fihjecchfifjeihihiqccijihjghrhcjeilipidjejlhfifjeihihiqccijihjghrgeirjhiqigjfccijihjghrhjiligjgikccgfiriqjgjeirioccjfihjghrhjiligjgikccijihjghrgkihilijikjgccjfihjghrgkihilijikjgccjfihjghrhfifjeiljcjgghjejeirjejfhfjhjcjcjeihjfjfihigccggidjgihhgilipihccijihjghrgqirjjccijihjghrhgilifinjfccgqidjiilijidjgihccgdjcjcioilifidjgiliriqccggirghjiihiqjgjfcchjihiegejeirj3fihjeheihidigjlhfjgidjgihccijihjghrheihidigjlhfjgidjgihccgkjgipioggirifjhipihiqjgccijihjghrggirifjhipihiqjgccirjchrghjdjhidioiljgjlccgkjgipioghioihipihiqjgccijihjghrgeirigjlccijihjghrgfioilihiqjgheihifjgidiqijioihccijihjghrggiripggirifjhipihiqjgccgjjeidjcikilifjfccglipidijihccgijeiripglipidijihccgjihjggkigifccgliqjghcjgjecchmihjeirccheihioihidjfihgkigifccgfiripglipjcirjejggdjgjgjeiliejhjgihccgliqjgihjei3difihhgjljcihgdjgjgjeiliejhjgihccgfiripgliqjgihjei3difihhgjljcihcchcjeihjfihjejiihhfilijgdjgjgjeiliejhjgihcchfjljfjgihipeqgfirigihggiripeqgfiripjcilioihjeccgjihiqihjeidjgihiggfirigihgdjgjgjeiliejhjgihccggihiejhijijihjegqiriqhhjfihjegfirigihgdjgjgjeiliejhjgihccgfiripjcilioihjegjihiqihjeidjgihiggdjgjgjeiliejhjgihcchgjljcihcchejhiqjgilipihhgjljcihgkidiqigioihccgjihjghgjljcihgijeiripgkidiqigioihccgdjfjfihipieiojlccijihjghrgdjfjfihipieiojlcchfjljfjgihipeqgfiripjciriqihiqjggpirigihioccghigiljgirjegejeirj3fidieioihgdjgjgjeiliejhjgihccghigiljgirjegejeirj3fidieioihhfjgidjgihcceqififjgirjecchfihjgjgiliqijjfgeidjfihcchfjliqifikjeiriqiljmihigcchjihiehcidijihfegeiljgipidjceqhcjeirjcihjejgilihjfeqheihjfirjhjeifihjfeqjeihjfirjhjeifihjfc6gjhjccihcciecchc3idccijccihccfeccgeccilccjgccipccidccjc3eqcchc3jeccirccjc3ihccjeccjgccilccihccjfcceqccheccihccjfccirccjhccjeccifccihccjfc10ohedenlkpdropmglnchrrfcendegqrlkc3knjjmhohidlfgqcklckncfrhrjrddphcmfmclc3hdecpcqckckckcecfec4d3eccmckclckdkdkdkdkdcd5cd5kclcfcidedhcfcidedlcgc4dedhcgc4dedlchc3dcddedlcgckccdedhcgckccdedlcfcidedgcgc4dedgcgckccdedgcgc9dcdcheccdcd3edcdcjcdckcddncgeccdcdcqcgeccdcdcecheccdcd3idcgeccdcdckcgc4dejdcgec3d4cfec4kcgc4ddjlcfec4mcfc5dchec3ddkckdchec3dekckhclc3ecedekckhdekckhchec3dekcklcfec3docheccecdckckckc3ddekckpdekcldcfec3dkcecidkcgeccdcddkdlcjcpdeipd4cmcmd9ecodecpdekckpdkdecpceddjlchcdc3dc4elcdccegfcfcfcfcfcfdfcigepfcfcfcfcepfcfcfcfcepgffcfcfcepfcfcfcfcfcfcfcfcfcfcfgfic5ieccdcd3kcmdckcdc3dc11heccecdcqcqgccdccffhfjljfjgihipeqheihjfirjhjeifihjfeqhgiririojfeqhfjgjeiriqijiojlhgjljcihigheihjfirjhjeifihgejhilioigihjecjfgeqfceqfceqfc6gcdc7kc3ddekcnhddkcnlchec3dekcnpcjeccecdcqdekcnpcjcjcfdedhdedhcecgcjcddedlcieccdcd3kcohckcdc3ec10hlcdccgngpilifjeirjfiriijgeqhiiljfjhidiohfjgjhigilireqghigiljgirjejfeqhfihjgjgiliqijjfggihjfilijiqihjeeqhfihjgjgiliqijjfhfiliqijioihgiilioihgjihiqihjeidjgirjeckfdfdeqfceqfceqfc6gcjcddedgckc3ddekcoldekcolgjcdccdmeqgqghhggijeidipihjjirjeineohiihjejfiliriqfpjifgeqfccdcchgcqdggijeidipihjjirjeinggiljfjcioidjlgqidipihdceqgqghhgecgijeidipihjjirjeinecfgdfcdc3qhjihiehcidijihfegeiljgipidjc6hcdc8djcdccdegfirjcjljeilijikjgecoemlececfefcfeffc4elcdccegf3iigi3dfkifihepfhieiefjepfgififigepidfjflffepiffhfkffiffhfi3fcfdfkidc5ocdc3jfdeqfceqfceqfc6kcdc3jcdc9kcdc3kc10dqcdc3dcchgcedihjjeidjcgqiriqghjkifihjcjgiliriqhgikjeirj3fcdc14qpeehrigc9ec6docdc4mcfgc4mcdic4hehfgghffrfhhmhmlghhpegrngkfrmfidnecegigcdc6ihfmhoqjmkknqhnmkrhohjihiehcidijihfegeiljgipidjchohjihiehcidijihfegeiljgipidjchohjihiehcidijihfegeiljgipidjchoirieimhoggihiejhijhohjihiehcidijihfegeiljgipidjceqjcigiec354qgfhc20rqfhc6ec45rcfhc24hrgfirjeggioiogpidiliqccipjfifirjeihiheqigioioc10rrehccec3dc1014dccdc7dkc4kc30dc3dc6fc5kc30dc10gkc6hkgc5qccec20qccefgc6hicchfcchrcchiccghcchecchfccglccgrccgqcchrccglccgqccgiccgrc10npcgqrrqc5dc7dc15dc10frc15gc7ec30ggc7dcchiccidccjeccgiccilccioccihccglcciqcciiccirc10egc3gc6hgccjeccidcciqccjfccioccidccjgccilccircciqc14nccggccec5dcchfccjgccjeccilcciqccijccgiccilccioccihccglcciqcciiccirc6docec5dccfc3fc3fc3fc3fc3fgccieccfc7gkc3rc3dccgiccilccioccihccggccihccjfccifccjeccilccjc3jgccilccircciqc10hjccihcciecchc3idccijccihccfeccgeccilccjgccipccidccjc11fc4kc3dccgiccilccioccihcchiccihccjeccjfccilccircciqc10fdcceqccfc3eqccfc3eqccfc7gkccdfc3dccglcciqccjgccihccjecciqccidccioccgqccidccipccihc6hjccihcciecchc3idccijccihccfeccgeccilccjgccipccidccjc3eqccigccioccioc10gkccdec3dccgoccihccijccidccioccgfccirccjc3jlccjeccilccijccikccjgc6gfccirccjc3jlccjeccilccijccikccjgccec3mlccec3ec3feccfc3feccffc6hc3dfc3dccgrccjeccilccijccilcciqccidccioccgiccilccioccihcciqccidccipccihc6hjccihcciecchc3idccijccihccfeccgeccilccjgccipccidccjc3eqccigccioccioc10gc4rc3dcchc3jeccirccigccjhccifccjgccgqccidccipccihc10hjccihcciecchc3idccijccihccfeccgeccilccjgccipccidccjc11fgc3kc3dcchc3jeccirccigccjhccifccjgcchiccihccjeccjfccilccircciqc6fdcceqccfc3eqccfc3eqccfc7fkc3kc3dccgdccjfccjfccihccipccieccioccjlccec3hiccihccjeccjfccilccircciqc6fdcceqccfc3eqccfc3eqccfc409fc6oc6dcfic1004";

    #endregion

}

/// <summary>
/// 将File2Str生成的字符串,还原为byte[]数据
/// 调用如: Sci.Str2Bytes.Process("gphmlc4fc7gc6r4c4nkc14gc71k")
/// </summary>
public class Str2Bytes
{
    /// <summary>
    /// 还原File2Str生成字符串为byte[]数据
    /// </summary>
    /// <param name="file2strData">由File2Str生成的字符串</param>
    /// <returns></returns>
    public static byte[] Process(string file2strData)
    {
        string data = Restore(file2strData);
        byte[] B = ToBytes(data);
        return B;
    }

    /// <summary>
    /// 还原为原有串信息
    /// enfkja4da6p4a4lia14ea11 -> 
    /// enfkjaaaadaaaaaaaeaaaaaappppaaaaliaaaaaaaaaaaaaaeaaaaaaaaaaa
    /// </summary>
    /// <param name="shrinkStr"></param>
    /// <returns></returns>
    private static string Restore(string shrinkStr)
    {
        char C = ' ';
        StringBuilder builder = new StringBuilder();
        string numStr = "";

        foreach (char c in shrinkStr)
        {
            if ('a' <= c && c <= 'z')
            {
                if (!numStr.Equals(""))
                {
                    int n = Int32.Parse(numStr);
                    while (n-- > 1) builder.Append(C.ToString());
                    numStr = "";
                }

                builder.Append(c.ToString());
                C = c;
            }
            else if ('0' <= c && c <= '9')
            {
                numStr += c.ToString();
            }
        }

        if ('a' <= C && C <= 'z')
        {
            if (!numStr.Equals(""))
            {
                int n = Int32.Parse(numStr);
                while (n-- > 1) builder.Append(C.ToString());
                numStr = "";
            }
        }

        return builder.ToString();
    }

    /// <summary>  
    /// 解析字符串为Bytes数组
    /// </summary>  
    private static byte[] ToBytes(string data)
    {
        byte[] B = new byte[data.Length / 2];
        char[] C = data.ToCharArray();

        for (int i = 0; i < C.Length; i += 2)
        {
            byte b = ToByte(C[i], C[i + 1]);
            B[i / 2] = b;
        }

        return B;
    }

    /// <summary>  
    /// 每两个字母还原为一个字节  
    /// </summary>  
    private static byte ToByte(char a1, char a2)
    {
        return (byte)((a1 - 'c') * 16 + (a2 - 'c'));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值