求助:DataUrl 怎么转成图片

摇撼大地 2016-09-08 11:28:58
如题。有没有好的方法。
...全文
636 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
慧慧851 2017-07-10
  • 打赏
  • 举报
回复
我想知道有木有js的方法呢
qq_22999453 2017-05-25
  • 打赏
  • 举报
回复
用了楼主的方法,发现照片的大小变了,而且有些失真,不知道楼主有没有遇到这样的问题???在线等。。。急。。。
摇撼大地 2016-09-08
  • 打赏
  • 举报
回复
上个代码吧:


/// <summary>
        /// 将前端传来的dataurl转成图片并返回文件地址
        /// </summary>
        /// <param name="dataUrl"></param>
        /// <returns></returns>
        public  string SaveImageDataUrlToFileAndReturnFilePath(string dataUrl)
        {
            string fileinfo = StringCutCharBefore(dataUrl,';');
            string fileExtend = StringCutCharAfter(fileinfo, '/');
            if (!Directory.Exists(HttpContext.Current.Server.MapPath("/upload/image")))
            {
                Directory.CreateDirectory(HttpContext.Current.Server.MapPath("/upload/image"));
            }
            //if (fileExtend == "jpeg") { fileExtend = "jpg"; }

            string filename = HttpContext.Current.Server.MapPath(String.Format("/upload/image/{0}.{1}", Guid.NewGuid().ToString(), fileExtend));

            byte[] arrb =  Convert.FromBase64String(StringCutCharAfter(dataUrl,','));
            MemoryStream stream = new MemoryStream(arrb);
            StreamToFile(stream, filename);

            return filename;
        }
        public string StringCutCharBefore(string str,char c)
        {
            var index = str.IndexOf(c);
            return str.Substring(0, index);
            
        }
        public string StringCutCharAfter(string str, char c)
        {
            return str.Substring(str.IndexOf(c) + 1);
        }
public void StreamToFile(Stream stream, string fileName)
        {

            // 把 Stream 转换成 byte[] 

            byte[] bytes = new byte[stream.Length];

            stream.Read(bytes, 0, bytes.Length);

            // 设置当前流的位置为流的开始 

            stream.Seek(0, SeekOrigin.Begin);

            // 把 byte[] 写入文件 

            FileStream fs = new FileStream(fileName, FileMode.Create);

            BinaryWriter bw = new BinaryWriter(fs);

            bw.Write(bytes);

            bw.Close();

            fs.Close();

        }


摇撼大地 2016-09-08
  • 打赏
  • 举报
回复
自己解决了。。。。获取DataUrl里面的Base64字符串。(这里我不知道是不是所有前端图片DataUrl都是这种编码格式) 然后转成Byte[]流。保存就行了。全部保存还不行。前面文件标记和编码格式的数据不能要。添加进去久卡住了不知道为什么。
crystal_lz 2016-09-08
  • 打赏
  • 举报
回复
所以说 你还给分吗?
wenyiyi 2016-09-08
  • 打赏
  • 举报
回复
楼主这是自己动手丰衣足食啊

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧