whole_func_string: function positionImages(styleObjList) {
      var styleObj,
          spriteArray = [],
          arr = [],
          existArr = [], // 保存已经合并过的图片的样式
          maxSize = spriteConfig.output.maxSingleSize,
          packer = new GrowingPacker();
  
      // 把已经合并了并已输出的图片先排除掉
      for (var i in styleObjList) {
          if (i === 'length') {
              continue;
          }
          styleObj = styleObjList[i];
          if (styleObj.imageInfo.drew) {
              existArr.push(styleObj);
          } else {
              arr.push(styleObj);
          }
      }
  
      // 如果限制了输出图片的大小, 则进行分组
      if (maxSize) {
  
          /* 
           * 限制图片大小的算法是:
           * 1. 先把图片按从大到小排序
           * 2. 顺序叠加图片 size , 超过maxSize 时, 另起一个数组
           * 3. 最终把一个数组, 拆成 N 个 总 szie 小于 maxSize 的数组
           */
          arr.sort(function(a, b) {
              return b.imageInfo.size - a.imageInfo.size;
          });
  
          var total = 0,
              ret = [];
          arr.forEach(function(styleObj) {
              total += styleObj.imageInfo.size;
  
              if (total > maxSize) {
                  if (ret.length) { // 避免出现空图片
                      spriteArray.push(ret);
                      ret = [];
                      total = styleObj.imageInfo.size;
                  }
              }
              ret.push(styleObj);
          });
  
          if (ret.length) {
              spriteArray.push(ret);
          }
      } else {
          spriteArray.push(arr);
      }
  
      spriteArray.forEach(function(arr) {
  
          /* 
           * packer 算法需要把最大的一个放在首位...
           * 排序算法会对结果造成比较大的影响
           */
          arr.sort(function(a, b) {
              return b.w * b.h - a.w * a.h;
          });
  
          // 用 packer 对数组元素进行定位
          packer.fit(arr);
  
          /* 
           * root 的值就是 packer 定位的结果
           * root.w / root.h 表示图片排列后的总宽高
           * 各个小图片的坐标这在 arr 的元素中, 新增了一个 fit 属性
           * fit.x / fit.y 表示定位后元素的坐标
           */
          arr.root = packer.root;
      });
      if (existArr.length) {
          spriteArray.push(existArr);
      }
      return spriteArray;
  }
func_code_string: function positionImages(styleObjList) {
      var styleObj,
          spriteArray = [],
          arr = [],
          existArr = [], // 保存已经合并过的图片的样式
          maxSize = spriteConfig.output.maxSingleSize,
          packer = new GrowingPacker();
  
      // 把已经合并了并已输出的图片先排除掉
      for (var i in styleObjList) {
          if (i === 'length') {
              continue;
          }
          styleObj = styleObjList[i];
          if (styleObj.imageInfo.drew) {
              existArr.push(styleObj);
          } else {
              arr.push(styleObj);
          }
      }
  
      // 如果限制了输出图片的大小, 则进行分组
      if (maxSize) {
  
          /* 
           * 限制图片大小的算法是:
           * 1. 先把图片按从大到小排序
           * 2. 顺序叠加图片 size , 超过maxSize 时, 另起一个数组
           * 3. 最终把一个数组, 拆成 N 个 总 szie 小于 maxSize 的数组
           */
          arr.sort(function(a, b) {
              return b.imageInfo.size - a.imageInfo.size;
          });
  
          var total = 0,
              ret = [];
          arr.forEach(function(styleObj) {
              total += styleObj.imageInfo.size;
  
              if (total > maxSize) {
                  if (ret.length) { // 避免出现空图片
                      spriteArray.push(ret);
                      ret = [];
                      total = styleObj.imageInfo.size;
                  }
              }
              ret.push(styleObj);
          });
  
          if (ret.length) {
              spriteArray.push(ret);
          }
      } else {
          spriteArray.push(arr);
      }
  
      spriteArray.forEach(function(arr) {
  
          /* 
           * packer 算法需要把最大的一个放在首位...
           * 排序算法会对结果造成比较大的影响
           */
          arr.sort(function(a, b) {
              return b.w * b.h - a.w * a.h;
          });
  
          // 用 packer 对数组元素进行定位
          packer.fit(arr);
  
          /* 
           * root 的值就是 packer 定位的结果
           * root.w / root.h 表示图片排列后的总宽高
           * 各个小图片的坐标这在 arr 的元素中, 新增了一个 fit 属性
           * fit.x / fit.y 表示定位后元素的坐标
           */
          arr.root = packer.root;
      });
      if (existArr.length) {
          spriteArray.push(existArr);
      }
      return spriteArray;
  }
func_documentation_string: **************************************************************** 4. 对图片进行坐标定位 **************************************************************** 
  对需要合并的图片进行布局定位
  @param  {StyleObjList} styleObjList
  @return {Array} 返回 spriteArrayay 的数组,
  SpriteImageArray 的每个元素都是 StyleObj 数组,
  一个 StyleObj 数组包含了一张精灵图的所有小图片