【需求来源】业务部门需要,为了节省修片同事的工作量
【具体需求】需要一个小工具,按照一定的规矩,大批量的修改或合并图片
通过需求分析,大概知道了这个工具中需要用到的方法,目录读取 (File),遍历目录中所有图片(list),还有一个规则的制定(startID,endID),然后就是图片处理合成(BitmapData)
1.前面的功能都挺简单的,所以直接忽略:
var picVect:Vector.<String > ; //图片地址列表
//获取图片目录下所有的图片文件
function getFilesBytes(patch:String):Vector.<String >
{
var file:File = File.applicationDirectory.resolvePath(patch);
var list:Array = file.getDirectoryListing();
var vect:Vector.<String> = new Vector.<String> ();
for (var i:uint=0; i<list.length; i++)
{
var subfile:File = list[i] as File;
debugInfo("路径:"+subfile.nativePath+"文件名:"+subfile.name);
if (subfile.nativePath.indexOf("xml") == -1)
{
vect.push(subfile.nativePath);
}
}
return vect;
}
2.图片地址有了,就是loader加载器按照规则去加载图片,然后依依处理或合并后再合成,这个逻辑是具体业务需求了,所以也不提供太具体的代码,毕竟这里不牵涉太多的功能设计,只是业务逻辑
3.图片合成,这里就是技术难点,因为所处理的图片像素都比较大,单张图的效率就已经不乐观了,还要批量。
尝试过多种方式,最后总结效率较高的思路是:
图片加载成功后---------------按业务需求处理图片---------------------处理完毕后有一个BitmapData-----------利用 BMPEncoder ,获得ByteArray-----FileStream直接写入本地文件------利用convert.exe,配置好参数bmp格式转jpg
为什么不直接写入jpg,因为经过测试,写入jpg的时候,开销太大,运行不流畅,所以这个动作交给第三方工具代为处理,只要传入合适的参数即可