字節組數(二進制流)、Base64、圖片(文件)、二進制相互之間轉換


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM