using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Web; using System.Web.Mvc; using WebUI.ServiceReferenceUser; using System.Text; namespace WebUI.Controllers { public class DefaultController : Controller { // GET: Default public ActionResult Index() { return View(); } #region 文件轉二進制流(字節數組) /// <summary> /// 文件轉二進制流(字節數組) /// </summary> /// <param name="strpath"></param> /// <returns></returns> public byte[] returnbyte(string strpath) { // 以二進制方式讀文件 FileStream fsMyfile = new FileStream(strpath, FileMode.OpenOrCreate, FileAccess.ReadWrite); // 創建一個二進制數據流讀入器,和打開的文件關聯 BinaryReader brMyfile = new BinaryReader(fsMyfile); // 把文件指針重新定位到文件的開始 brMyfile.BaseStream.Seek(0, SeekOrigin.Begin); byte[] bytes = brMyfile.ReadBytes(Convert.ToInt32(fsMyfile.Length.ToString())); // 關閉以上new的各個對象 brMyfile.Close(); return bytes; } #endregion #region 圖片轉二進制流(字節數組) /// <summary> /// 圖片轉二進制流(字節數組) /// </summary> /// <param name="Imagefilename"></param> /// <returns></returns> private byte[] ImgToByte(string Imagefilename) { Bitmap bmp = new Bitmap(Imagefilename); MemoryStream ms = new MemoryStream(); bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] arr = new byte[ms.Length]; ms.Position = 0; ms.Read(arr, 0, (int)ms.Length); ms.Close(); return arr; } #endregion #region 二進制流轉圖片 /// <summary> /// 二進制流轉圖片 /// </summary> /// <param name="arr"></param> /// <param name="FileName"></param> private void ByteToImg(byte[] arr, string FileName) { MemoryStream ms = new MemoryStream(arr); Bitmap bmp = new Bitmap(ms); bmp.Save(FileName); } #endregion #region 圖片轉Base64字符串 /// <summary> /// 圖片轉Base64字符串 /// </summary> /// <param name="Imagefilename"></param> /// <returns></returns> private string ImgToBase64String(string Imagefilename) { Bitmap bmp = new Bitmap(Imagefilename); MemoryStream ms = new MemoryStream(); bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] arr = new byte[ms.Length]; ms.Position = 0; ms.Read(arr, 0, (int)ms.Length); ms.Close(); String strbaser64 = Convert.ToBase64String(arr); return strbaser64; } #endregion #region Base64字符串轉圖片 /// <summary> /// Base64字符串轉圖片 /// </summary> /// <param name="Base64Str"></param> /// <param name="FileName"></param> private void Base64StringToImg(string Base64Str, string FileName) { MemoryStream ms = new MemoryStream(Convert.FromBase64String(Base64Str)); Bitmap bmp = new Bitmap(ms); bmp.Save(FileName); } #endregion #region Base64和字節數組互轉 /// <summary> /// Base64轉字節數組 /// </summary> /// <param name="Base64Str"></param> /// <returns></returns> private byte[] Base64StringToByte(string Base64Str) { return Convert.FromBase64String(Base64Str); } /// <summary> /// 字節數組轉Base64 /// </summary> /// <param name="arr"></param> /// <returns></returns> private string ByteToBase64String(byte[] arr) { return Convert.ToBase64String(arr); } #endregion #region 字節流與二進制互轉 /// <summary> /// 字節流與二進制互轉 /// </summary> public void ByteToBit() { var bytearr = ImgToByte(Server.MapPath("/images/teacher.jpg")); StringBuilder str = new StringBuilder(); foreach (var p in bytearr) { str.AppendFormat("{0},", Convert.ToString(p, 2)); } var imgstr = str.ToString().Trim(','); FileHelper.WriteText(Server.MapPath("/bit.txt"), imgstr); var arr = FileHelper.FileToString(Server.MapPath("/bit.txt")).Split(','); var imgarr = Array.ConvertAll<string, byte>(arr, m => Convert.ToByte(m, 2)); } #endregion /// <summary> /// 測試輸出圖片 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public ActionResult Pic(string fileName) { return File(Base64StringToByte(FileHelper.FileToString(fileName)), @"image/jpeg"); } } }
