|
100精币
本帖最后由 690089735 于 2015-7-20 22:12 编辑
前言,
由于工作需要,经常要批量处理大量的jpg图片,并分别压缩为横向图片800*600和纵向图片600*800的
然后,我想起来了丢弃多年的易语言(当年就是菜鸟一只)。
两天时间,把我能找到的与我相关的问题看了个遍,终于会了递归遍历和画板改图片,以及写到文件的操作。
测试时没有问题,也十分高效,完全可以替代自己原本的手动操作。
我采用递归的方式遍历指定的目录下的所有JPG。每取到一个,就调用一次我写好的图像处理的子程序。
图像处理的机制,是借助-------载入图片,画板.画图片,然后取图片,写到文件,再转JPG,最后卸载图片----实现的。
咋一看没什么问题。我测试时用了10个文件夹,30张图片,毫无问题,快捷高速。
但是,当我真正投入使用时,发现了巨大的问题!
问题!
真正投入使用时,需要处理5GB到15GB的数据量,1000到2000个文件夹,共1000到3000张图片,每张图片2000*3000左右。画板无法胜任。
按理说应该也没什么问题,但是内存占用急速飙升!!!越来越卡,最后已经到死机的程度。而且每项的处理速度都非常的慢(接近1秒左右)。
根据网络搜索和单独调试,我推断,问题可能是出在画板上!
首先,画板绘图效率低,利用其处理大分辨率的图像自然会慢。效率无法保证。
其次,为了界面的简洁和实用,画板是放置在窗口看不见的地方的,这就决定了其必须开启自动重画这一项(否则取出为黑),我的遍历命令,加上自动重画的剪贴板存取原理,使我的内存占用不断按百KB上涨,而且不退出程序无法自动释放,最终导致程序崩溃(内存不足!)。
我想求得的解决方案:
1.脱离画板绘图,快速处理JPG的压缩,只需要处理尺寸压缩大小即可。(网上的代码大多是画板绘图处理小图片或少量图片的,另外的极少部分,是纯英语代码)最好是字节集级别的操作。
2.帮我解决原始代码内存泄漏的真正原因
原代码打包如下:
附:如果您想调试,请使用大量嵌套文件夹的大尺寸的JPG图像(至少1000个文件夹,1000个2000*2000JPG,可使用复制来实现),否则程序会快速高效的运行完毕,让人以为没有任何问题。
批量图片压缩.zip
(182.68 KB, 下载次数: 17)
|
求助知识:请将问题描述清楚,最好把你有问题的源码打包上传上来,这样更方便大家帮助你。 友情提醒:本版被采纳的主题可在 申请荣誉值 帖子申请荣誉值,获得 3点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
|