C# 圖片與Base64碼的相互轉(zhuǎn)化問題(代碼詳解)
Base64是網(wǎng)絡上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數(shù)據(jù)的方法。可查看RFC2045~RFC2049,上面有MIME的詳細規(guī)范。
Base64編碼是從二進制到字符的過程,可用于在HTTP環(huán)境下傳遞較長的標識信息。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。
Base64由于以上優(yōu)點被廣泛應用于計算機的各個領域,然而由于輸出內(nèi)容中包括兩個以上“符號類”字符(+, /, =),不同的應用場景又分別研制了Base64的各種“變種”。為統(tǒng)一和規(guī)范化Base64的輸出,Base62x被視為無符號化的改進版本。
下面通過代碼給大家介紹下c# 圖片與base64相互轉(zhuǎn)化問題,代碼如下所示:
public ActionResult UploadSignature2(string src_data)
{
Class1.Base64StrToImage(src_data, "C:\\Users\\45448\\Desktop\\1\\"+ DateTime.Now.ToString("yyyyMMddHHss") + ".png");
return Json(1, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 將Base64字符串轉(zhuǎn)換為圖片并保存到本地
/// </summary>
/// <param name="base64Str">base64字符串</param>
/// <param name="savePath">圖片保存地址,如:/Content/Images/10000.png</param>
/// <returns></returns>
public static bool Base64StrToImage(string base64Str, string savePath)
{
var ret = true;
try
{
base64Str = base64Str.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "")
.Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", ""); //將base64頭部信息替換
var bitmap = Base64StrToImage(base64Str);
if (bitmap != null)
{
//創(chuàng)建文件夾
var folderPath = savePath.Substring(0, savePath.LastIndexOf('\\'));
////FileHelper.CreateDir(folderPath);
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
//圖片后綴格式
var suffix = savePath.Substring(savePath.LastIndexOf('.') + 1,
savePath.Length - savePath.LastIndexOf('.') - 1).ToLower();
var suffixName = suffix == "png"
? ImageFormat.Png
: suffix == "jpg" || suffix == "jpeg"
? ImageFormat.Jpeg
: suffix == "bmp"
? ImageFormat.Bmp
: suffix == "gif"
? ImageFormat.Gif
: ImageFormat.Jpeg;
//這里復制一份對圖像進行保存,否則會出現(xiàn)“GDI+ 中發(fā)生一般性錯誤”的錯誤提示
var bmpNew = new Bitmap(bitmap);
bmpNew.Save(savePath, suffixName);
bmpNew.Dispose();
bitmap.Dispose();
}
else
{
ret = false;
}
}
catch (Exception ex)
{
ret = false;
}
return ret;
}
/// <summary>
/// Image 轉(zhuǎn)成 base64
/// </summary>
/// <param name="fileFullName"></param>
public static string ImageToBase64(string fileFullName)
{
try
{
Bitmap bmp = new Bitmap(fileFullName);
MemoryStream ms = new MemoryStream();
var suffix = fileFullName.Substring(fileFullName.LastIndexOf('.') + 1,
fileFullName.Length - fileFullName.LastIndexOf('.') - 1).ToLower();
var suffixName = suffix == "png"
? ImageFormat.Png
: suffix == "jpg" || suffix == "jpeg"
? ImageFormat.Jpeg
: suffix == "bmp"
? ImageFormat.Bmp
: suffix == "gif"
? ImageFormat.Gif
: ImageFormat.Jpeg;
bmp.Save(ms, suffixName);
byte[] arr = new byte[ms.Length]; ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length); ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
return null;
}
}
到此這篇關于C# 圖片與Base64碼的相互轉(zhuǎn)化問題(代碼詳解)的文章就介紹到這了,更多相關c# 圖片與base64相互轉(zhuǎn)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Unity3D UI Text得分數(shù)字增加的實例代碼
這篇文章主要介紹了Unity3D UI Text得分數(shù)字增加方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Unity工具類ScrollView實現(xiàn)拖拽滑動翻頁
這篇文章主要為大家詳細介紹了Unity工具類ScrollView實現(xiàn)拖拽滑動翻頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04
C#實現(xiàn)將音頻PCM數(shù)據(jù)封裝成wav文件
這篇文章主要為大家詳細介紹了C#如何實現(xiàn)將音頻PCM數(shù)據(jù)封裝成wav文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2023-10-10
Winform開發(fā)中使用下拉列表展示字典數(shù)據(jù)的幾種方式
這篇文章介紹了Winform開發(fā)中使用下拉列表展示字典數(shù)據(jù)的幾種方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09

