Foxtable(狐表)用户栏目专家坐堂 → [求助]导出excxel时图片太大爆内存了,System.OutOfMemoryException


  共有7605人关注过本帖树形打印复制链接

主题:[求助]导出excxel时图片太大爆内存了,System.OutOfMemoryException

帅哥哟,离线,有人找我吗?
chen3728060
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
[求助]导出excxel时图片太大爆内存了,System.OutOfMemoryException  发帖心情 Post By:2016/4/28 22:14:00 [只看该作者]

我想问下,我有个图片列,当时FTP上传照片时都2m多一张,现在在excel报表的图片列里,用缩放提取图片,

[&照片,0,,100,-1]

照片是能显示,但是实际上我发现它没有压缩到100像素的,只是缩小到100像素而已,然后我1000多个产品,一共1000*2m的图片加载到内存生存excel报表,立刻就爆我内存

 

GDI+ 中发生一般性错误。
引发类型为“System.OutOfMemoryException”的异常。


我想问下,应该如何在导出前把图片压缩了,再导出(我不能去服务器里压缩原文件,我都是些珠宝图,压缩了将来就做不了海报了)?在什么事件里执行压缩放excel里好?有压缩的代码和帮助参考吗?

我的图片列名字就是“照片”,是用FTP存的,非二进制。谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/28 23:17:00 [只看该作者]

你的ftp服务器里面,应该单独用一个文件夹存放缩略图的吧?

 

生成缩略图也是很简单的,比如代码

 

Dim file As String = "d:\test.jpg"
Dim img As image = getImage(file)
Dim bmp  = new bitmap(img, 100, 100)
bmp.save("d:\缩略图.jpg")
bmp.Dispose


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/28 23:18:00 [只看该作者]

如果要等比缩放,这样

 

Dim file As String = "d:\test.jpg"
Dim img As image = getImage(file)
Dim bmp As new bitmap(img, 100, 100 * (img.height / img.width))
bmp.save("d:\缩略图.jpg")
bmp.Dispose


 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(大红袍)如果要等比缩放,这样 Dim ...  发帖心情 Post By:2016/4/29 8:40:00 [只看该作者]

我想问下,帮助文档里,哪里是写关于图像处理了?好像很分散

 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(大红袍)如果要等比缩放,这样 Dim ...  发帖心情 Post By:2016/4/29 8:42:00 [只看该作者]

我想是生成excel的时候,生成一个临时的缩略图,再放入excel。

还是老师您觉得,是上传图片时已经生成好缩略图,导出excel就直接获取更好?不过后者的方法,就规定了缩略图尺寸,不能每次生成时根据实际调整分辨率


 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/4/29 8:53:00 [只看该作者]

作为缩略图,一般尺寸都是固定的,看看一些看图软件的作法就知道了。

如果经常用大图的话,建议同时生成缩略图。

如果需要根据实际调整分辨率,那就在使用的时候再生成指定分辨率的图像好了

 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(Hyphen)作为缩略图,一般尺寸都是固定的,看...  发帖心情 Post By:2016/4/29 9:16:00 [只看该作者]

我想问下关于图片处理(例如缩放、FTP上传下载)的帮助文档的链接是什么?我去学习一下


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/29 9:19:00 [只看该作者]

以下是引用chen3728060在2016/4/29 8:42:00的发言:

我想是生成excel的时候,生成一个临时的缩略图,再放入excel。

还是老师您觉得,是上传图片时已经生成好缩略图,导出excel就直接获取更好?不过后者的方法,就规定了缩略图尺寸,不能每次生成时根据实际调整分辨率

 

你的是ftp图片的话,处理就有些问题了,你要去编写报表事件,在细节去生成之前,下载文件,然后生成缩略图。

 

http://www.foxtable.com/help/topics/1955.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(大红袍)以下是引用chen3728060在2016/4/29 8...  发帖心情 Post By:2016/4/29 9:20:00 [只看该作者]

我的流程,应该是

①准备生成报表细节时,出发builddetail事件

②在FTP服务器上读取这行对应的图片,生成缩略图

③下载缩略图到本地

④excel模板里设置为直接引用该图片

...下一行....

生成完毕,对吧?

[此贴子已经被作者于2016/4/29 9:21:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(大红袍)以下是引用chen3728060在2016/4/29 8...  发帖心情 Post By:2016/4/29 9:27:00 [只看该作者]

应该是先FTP下载图片到本地,然后本地生成缩略图,然后excel在直接引用图片,是吧?

 回到顶部
总数 15 1 2 下一页