C#保存Base64格式图片
1.前端页面代码 /** * 通过图片本地路径获取图片真实大小,并进行压缩 */ function getLocalRealSize(path, callback) { var img = new Image(); var tempimg = new Image(); img.src = path; img.onload = function() { var height = img.naturalHeight; var width = img.naturalWidth; img.width = img.naturalWidth; img.height = img.naturalHeight; //压缩图片 var canvas = compressImage(img); tempimg = canvas.toDataURL('image/jpeg'); callback(tempimg); } }; /** * 压缩图片 */ function compressImage(image) { var canvas = document.createElement("canvas"); var mwidth = image.width; var mheight = image.height; var scale = 1; var i = 0; while (true) { if (mwidth >> i <= 1000 && mheight >> i <= 1000) { scale = Math.pow(0.5, i); break; } i += 1; } canvas.width = mwidth * scale; canvas.height = mheight * scale; canvas.getContext("2d").drawImage(image, 0, 0, mwidth * scale, mheight * scale); return canvas; } //主页面 车主首页 跳转 document.getElementById("driverindex").addEventListener("tap", function() { //获取img对象 var OwerImg = document.getElementById("owner-photo-img"); var OwerCardImg = document.getElementById("owner-cardphoto-img"); var OwerLicenceImg = document.getElementById("owner-driver1-img"); var OwerDrivingLicenceImg = document.getElementById("owner-driver2-img"); var CarImg = document.getElementById("owner-car-img"); var AssuranceImg = document.getElementById("owner-sure-img"); var oArray=source.split("|"); var totalCount=imgCount+oArray.length-1; if(totalCount<6){ mui.toast("请上传完整信息"); return false; } uploadImg(); }); }); // 上传文件 var uploadImg = function() { var server = imgUrl+'/clientapi/driver/ApplayCertification'; //outSet("开始上传:") var wt = plus.nativeUI.showWaiting(); var task = plus.uploader.createUpload(server, { method: "POST", blocksize: 20480000, priority: 100 }, function(t, status) { //上传完成 if (t.state == 4 && status == 200) { wt.close(); //outLine("上传成功:" + t.responseText); //上传成功,跳转到车主首页 mui.toast('上传成功'); mui.fire(mycarPage, "pageflowrefresh" ); plus.webview.currentWebview().close(); mui.redirect('myaccount-mycar', '../myaccount/mycar.html'); } else { //outLine("上传失败:" + status); wt.close(); mui.toast('上传失败'); } } ); task.addData("token", UserInfo.token()); task.addData("source", source); task.start(); } 2.C#后台代码 //将base64编码的字符串转为图片并保存 protected string SaveBase64Image(string source, string path, int userID) { try { var now = DateTime.Now; string filePath = path + now.ToString("yyyy-MM-dd") + "/" + userID.ToString() + "/"; string fileName = now.ToString("yyyyMMddhhmmssffff") + ".jpg"; Log.Debug("filePath:" + filePath + fileName); string strbase64 = source.Substring(source.IndexOf(',') + 1); strbase64 = strbase64.Trim('\0'); //Log.Debug("strbase64:" + strbase64); byte[] arr = Convert.FromBase64String(strbase64); using (MemoryStream ms = new MemoryStream(arr)) { Log.Debug("进入了MemoryStream"); Bitmap bmp = new Bitmap(ms); if (!Directory.Exists(Server.MapPath(filePath))) { Log.Debug("没有Directory"); Directory.CreateDirectory(Server.MapPath(filePath)); } //if (!Directory.Exists(filePath)) // Log.Debug("没有Directory"); //Directory.CreateDirectory(filePath); //新建第二个bitmap类型的bmp2变量。 Bitmap bmp2 = new Bitmap(bmp, bmp.Width, bmp.Height); //将第一个bmp拷贝到bmp2中 Graphics draw = Graphics.FromImage(bmp2); draw.DrawImage(bmp, 0, 0); draw.Dispose(); Log.Debug("保存图片前"); bmp2.Save(Server.MapPath(filePath + fileName), System.Drawing.Imaging.ImageFormat.Jpeg); Log.Debug("保存图片后"); //bmp.Save("test.bmp", ImageFormat.Bmp); //bmp.Save("test.gif", ImageFormat.Gif); //bmp.Save("test.png", ImageFormat.Png); ms.Close(); return filePath + fileName; } } catch (Exception ex) { return null; } }
本文来自博客园,作者:jevan,转载请注明原文链接:https://www.cnblogs.com/DoNetCShap/p/8789811.html
分类:
JavaScript
, C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端