以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]导出excxel时图片太大爆内存了,System.OutOfMemoryException  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84351)

--  作者:chen3728060
--  发布时间:2016/4/28 22:14:00
--  [求助]导出excxel时图片太大爆内存了,System.OutOfMemoryException
我想问下,我有个图片列,当时FTP上传照片时都2m多一张,现在在excel报表的图片列里,用缩放提取图片,

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

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

 

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


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

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


--  作者:大红袍
--  发布时间: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


--  作者:大红袍
--  发布时间: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
--  发布时间:2016/4/29 8:40:00
--  回复:(大红袍)如果要等比缩放,这样 Dim ...
我想问下,帮助文档里,哪里是写关于图像处理了?好像很分散
--  作者:chen3728060
--  发布时间:2016/4/29 8:42:00
--  回复:(大红袍)如果要等比缩放,这样 Dim ...

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

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


--  作者:Hyphen
--  发布时间:2016/4/29 8:53:00
--  
作为缩略图,一般尺寸都是固定的,看看一些看图软件的作法就知道了。

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

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

--  作者:chen3728060
--  发布时间:2016/4/29 9:16:00
--  回复:(Hyphen)作为缩略图,一般尺寸都是固定的,看...

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


--  作者:大红袍
--  发布时间: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
--  发布时间:2016/4/29 9:20:00
--  回复:(大红袍)以下是引用chen3728060在2016/4/29 8...

我的流程,应该是

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

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

③下载缩略图到本地

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

...下一行....

生成完毕,对吧?

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

--  作者:chen3728060
--  发布时间:2016/4/29 9:27:00
--  回复:(大红袍)以下是引用chen3728060在2016/4/29 8...
应该是先FTP下载图片到本地,然后本地生成缩略图,然后excel在直接引用图片,是吧?