【asp】图⽚和Base64编码互相转换在调⽤阿⾥云上⾯的api接⼝时,有些图⽚处理接⼝都需要将图⽚⽂件转换成base64,传递参数然后才能调⽤。
⽹上搜了下⼀些图⽚和base转换的⽅法:
⼀、通过jQuery⽅法转换
html代码部分:
<input type="file" name="file" id="img_upload_file" value="" multiple="multiple" />
<input type="hidden" name="img_upload_base" id="img_upload_base" />
<textarea rows="30" cols="100" id="img_upload_base_text"></textarea>
js代码部分 :
<script src="scripts/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function () {
$("#img_upload_file").change(function () {
var file = this.files[0];
jquery在线图片var reader = new FileReader();
$("#img_upload_show").attr("src", sult);//将转换后的编码存⼊src完成预览
$("#img_upload_base").sult);//将转换后的编码保存到input供后台使⽤
$("#img_upload_base_text").sult);//显⽰出转换后的编码数据
};
});
});
</script>
这个⽅法⽐较简单,省时省⼒,转换的操作都放到⽤户浏览器上进⾏,减少服务器压⼒。
⼆、asp后台处理转换
html代码部分:
<asp:FileUpload ID="file_upload" runat="server" />
<asp:Button ID="btn" runat="server" Text="后台转换" OnClick="btn_Click" />
<img id="img_upload_show" src="" />
aps后台代码部分:
protected void btn_Click(object sender, EventArgs e)
{
//获取上传⽂件的名称
string btn_file= file_upload.PostedFile.FileName;
//获取服务器上路径
string imgPath = Server.MapPath("Imagers/");
//获取⽂件后缀
string houzui = btn_file.Substring(btn_file.LastIndexOf('.'));
//上传⽂件路径,重命名
string filePath = imgPath + Guid.NewGuid().ToString()+ houzui;
//上传⽂件
file_upload.SaveAs(filePath);
//转换base64
string result = imgToBase64(filePath);
/
/写⼊txt⽂件中
string path = Server.MapPath("/Base");
System.IO.File.WriteAllText(path + "//" + Guid.NewGuid().ToString() + ".txt", result);
}
imagerToBase64的⽅法:
/// <summary>
/// imager 转换成Base64
/// </summary>
/// <param name="filePath">⽂件路径</param>
/// <returns>base64编码</returns>
private string imgToBase64(string filePath)
{
//⽤streamread读这个⽂件
System.IO.StreamReader sr = new StreamReader(filePath, Encoding.Default, true);
int index;
//实例化⼀个内存流
System.IO.MemoryStream tempStream = new MemoryStream();
//将流转换为字节数组
while ((index = sr.BaseStream.ReadByte()) != -1)
{
tempStream.WriteByte(((byte)index));
}
byte[] array = tempStream.ToArray();
tempStream.Close();
//将得到的字节数组转换为base64位编码
string result = Convert.ToBase64String(array);
return result;
}
这个⽅法不太⽅便,需要先将图⽚上传⾄服务器,然后得到图⽚的路径,再进⾏ 转换。
三、Base64编码转图⽚
在写这个时候,遇到个bug,Bitmap参数⽆效,原来是错误的将 gif 的 动态图的编码转成Bitmap所以会报错的 额 。
/// <summary>
/// base64编码的⽂本转为图⽚
/// </summary>
/// <param name="txtFileName">Base编码的txt⽂本路径 </param>
private void Base64StringToImage(string txtFileName)
{
try
{
FileStream ifs = new FileStream(txtFileName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(ifs);
//读取txt⾥⾯的内容
String inputStr = sr.ReadToEnd();
//转图⽚
byte[] bt = Convert.FromBase64String(inputStr);
System.IO.MemoryStream stream = new System.IO.MemoryStream(bt);
Bitmap bmp = new Bitmap(stream);
string fileName = txtFileName.Substring(0, txtFileName.IndexOf("."));
if (File.Exists(fileName))
{
File.Delete(fileName);
}
//存储到服务器上
bmp.Save(fileName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Save(fileName + ".bmp", ImageFormat.Bmp);
bmp.Save(fileName + ".gif", ImageFormat.Gif);
bmp.Save(fileName + ".png", ImageFormat.Png);
stream.Close();
sr.Close();
ifs.Close();
}
catch (Exception ex)
{
//("Base64StringToImage 转换失败\nException:" + ex.Message);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论