C# 字節流通過轉換成圖片
// 需引入以下相關命名空間
// using System.IO;
// using System.Drawing;
// using System.Runtime.Serialization.Formatters.Binary;
// using System.Text;
protected void Page_Load(object sender, EventArgs e)
{
string txt = Encoding.Default.GetString(ReadFile(Server.MapPath(@"\sex.txt")));
string fmtxt = "";
string[] strs = txt.Split(new string[] { "\r\n" }, StringSplitOptions.None);
for (int i = 0; i < strs.Length - 1; i++)
{
if (strs[i].Trim().Length == 1)
{
fmtxt += "0" + strs[i].Trim().ToUpper();
}
else
{
fmtxt += strs[i].Trim().ToUpper();
}
}
Write_Txt(Server.MapPath(@"11.txt"), fmtxt);
byte[] bt = HexToByte(fmtxt);
SaveImage(Server.MapPath(@"\SexSex.jpg"), bt);
Response.Write("圖片已生成!");
}
#region
/// <summary>
/// 保存圖片 JPEG格式
/// </summary>
/// <param name="fileName">保存圖片的路徑 JPEG格式</param>
/// <param name="bt"></param>
private void SaveImage(string fileName, byte[] bt)
{
MemoryStream ms = new MemoryStream(bt); //建立內存的流
System.Drawing.Image img = System.Drawing.Image.FromStream((Stream)ms); //把內存的流轉換成圖片格式
img.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);// 保存圖片
}
/// <summary>
/// 轉換為16進制 返回 byte[]
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
private byte[] HexToByte(string hexString)
{
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
/// <summary>
/// 寫入文件流並保存
/// </summary>
/// <param name="FileName">保存文件的路徑</param>
/// <param name="Content">內容</param>
protected void Write_Txt(string FileName, string Content)
{
Encoding code = Encoding.GetEncoding("gb2312");
string htmlfilename = FileName; //保存文件的路徑
string str = Content;
StreamWriter sw = null;
{
try
{
sw = new StreamWriter(htmlfilename, false, code);
sw.Write(str);
sw.Flush();
}
catch { }
}
sw.Close();
sw.Dispose();
}
/// <summary>
/// 讀取文件流 返回 byte[]
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public byte[] ReadFile(string filePath)
{
byte[] buffer;
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
try
{
int length = (int)fileStream.Length; // 獲取文件流長度
buffer = new byte[length]; // 創建byte[]數組
int count; // 實際讀取的字節數
int sum = 0; // 讀取的字節總數
//讀取流已經到達的位置,直到方法返回0時結束
while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
sum += count; // 下一個讀取流起始位置
}
finally
{
fileStream.Close();
}
return buffer;
}
#endregion