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'));
}
}