c# 超长base64字符串保存为图片,内存不足。怎么解决?

时间:2021-04-26 21:48:39
各位大神,

            string base64 = context.Request["img64"].Replace("data:image/png;base64,", "");
            byte[] arr = Convert.FromBase64String(base64);

            using (MemoryStream ms = new MemoryStream(arr))
            {
                using (Bitmap bmp = new Bitmap(ms))
                {
                    bmp.Save(DetectionDirectory(context, imgPath) + "DesignChart.png", ImageFormat.Jpeg);
                }
            }


图片很大,大约20000px乘以20000px,导致Base64字符串很长,new BitMap的时候就报了outofMemoryException。

请问,如何处理能成功保存图片文件?

12 个解决方案

#1


c# 超长base64字符串保存为图片,内存不足。怎么解决?再买根内存

#2


c# 超长base64字符串保存为图片,内存不足。怎么解决?大约20000px乘以20000px
额额额。。不过也没有多大啊 顶多也就是几十M
此时 你的Arr长度有多大?。。。
重点是 你的Arr 就是你的图像数据了 你可以直接保存了
(using FileStream fs = new ("test.png",...)) { fs.WriteBytes(Arr,0,Arr.Length); }

#3


别用图片类,直接用文件流保存

#4


晕!你的 arr 直接保存到文件就行了,还要 Bitmap 干什么啊?

#5


#1好机智的说

#6


保存只要有字节就行了,确实不是一定要用Bitmap

#7


不是不一定,而是没必要。这个时候直接用BYTE转换成文件即可
但是未来如果这张图片的处理仍然会出现这样的问题,这图片该有多大啊,我擦

#8


引用 2 楼 crystal_lz 的回复:
c# 超长base64字符串保存为图片,内存不足。怎么解决?大约20000px乘以20000px
额额额。。不过也没有多大啊 顶多也就是几十M
此时 你的Arr长度有多大?。。。
重点是 你的Arr 就是你的图像数据了 你可以直接保存了
(using FileStream fs = new ("test.png",...)) { fs.WriteBytes(Arr,0,Arr.Length); }


现在保存时没问题了,读取出来处理的时候依然是内存不足

#9


c# 超长base64字符串保存为图片,内存不足。怎么解决?
加内存。提交exe的使用内存限制。当然以上都是吹牛B的 c# 超长base64字符串保存为图片,内存不足。怎么解决?

#10


上传图片到服务器。数据库只存路径。 

#11


展开成位图需要 1.5G,确实比较大
既然图片远大于屏幕尺寸,那为何不考虑切成小图再处理呢

#12


引用 11 楼 xuzuning 的回复:
展开成位图需要 1.5G,确实比较大
既然图片远大于屏幕尺寸,那为何不考虑切成小图再处理呢


在开发一个图片生成的软件,根据参数生成一个整体架构图,再分割成很多的局部图。不用位图有其它方式吗

#1


c# 超长base64字符串保存为图片,内存不足。怎么解决?再买根内存

#2


c# 超长base64字符串保存为图片,内存不足。怎么解决?大约20000px乘以20000px
额额额。。不过也没有多大啊 顶多也就是几十M
此时 你的Arr长度有多大?。。。
重点是 你的Arr 就是你的图像数据了 你可以直接保存了
(using FileStream fs = new ("test.png",...)) { fs.WriteBytes(Arr,0,Arr.Length); }

#3


别用图片类,直接用文件流保存

#4


晕!你的 arr 直接保存到文件就行了,还要 Bitmap 干什么啊?

#5


#1好机智的说

#6


保存只要有字节就行了,确实不是一定要用Bitmap

#7


不是不一定,而是没必要。这个时候直接用BYTE转换成文件即可
但是未来如果这张图片的处理仍然会出现这样的问题,这图片该有多大啊,我擦

#8


引用 2 楼 crystal_lz 的回复:
c# 超长base64字符串保存为图片,内存不足。怎么解决?大约20000px乘以20000px
额额额。。不过也没有多大啊 顶多也就是几十M
此时 你的Arr长度有多大?。。。
重点是 你的Arr 就是你的图像数据了 你可以直接保存了
(using FileStream fs = new ("test.png",...)) { fs.WriteBytes(Arr,0,Arr.Length); }


现在保存时没问题了,读取出来处理的时候依然是内存不足

#9


c# 超长base64字符串保存为图片,内存不足。怎么解决?
加内存。提交exe的使用内存限制。当然以上都是吹牛B的 c# 超长base64字符串保存为图片,内存不足。怎么解决?

#10


上传图片到服务器。数据库只存路径。 

#11


展开成位图需要 1.5G,确实比较大
既然图片远大于屏幕尺寸,那为何不考虑切成小图再处理呢

#12


引用 11 楼 xuzuning 的回复:
展开成位图需要 1.5G,确实比较大
既然图片远大于屏幕尺寸,那为何不考虑切成小图再处理呢


在开发一个图片生成的软件,根据参数生成一个整体架构图,再分割成很多的局部图。不用位图有其它方式吗