1、文件路径配置
sprite-path: /home/mapplate/sprite/
2、实现类
package com.shgis.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.shgis.config.FileProperties;
import com.shgis.entity.EbufferedImage;
import com.shgis.exception.MsgException;
import com.shgis.service.SpriteService;
import com.shgis.utils.StringUtils;
import com.shgis.utils.Util;
import lombok.Cleanup;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class SpriteServiceImpl implements SpriteService {
private String spritePath;
private FileProperties fileProperties;
public SpriteServiceImpl(FileProperties fileProperties) {
this.fileProperties = fileProperties;
this.spritePath = fileProperties.getPath().getSpritePath();
}
@Override
public void generateSprite() {
List<File> files = new ArrayList<>();
try {
files = new Util().getFiles(this.spritePath + "images" + File.separator + "icons");
} catch (Exception e) {
e.printStackTrace();
}
List<BufferedImage> buffImages = new ArrayList<>();
for (File file : files) {
try {
buffImages.add(ImageIO.read(file));
} catch (IOException e) {
e.printStackTrace();
}
}
int type = buffImages.get(0).getType();
int chunkWidth = buffImages.get(0).getWidth();
int chunkHeight = buffImages.get(0).getHeight();
int cols = 6;
int rows = files.size()/cols + 1;
BufferedImage finalImg = new BufferedImage(chunkWidth * cols, chunkHeight * rows, type);
JSONObject json = new JSONObject();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int num = i*6+j;
if(num+1 <= files.size()) {
finalImg.createGraphics().drawImage(buffImages.get(num), chunkWidth * j, chunkHeight * i, null);
JSONObject obj = new JSONObject();
obj.put("height", chunkHeight);
obj.put("width", chunkWidth);
obj.put("pixelRatio", type);
obj.put("x", chunkWidth * j);
obj.put("y", chunkHeight * i);
String fileName = files.get(num).getName().split("\\.")[0].split("@")[0];
json.put(fileName, obj);
}
}
}
try {
ImageIO.write(finalImg, "png", new File(this.spritePath + "sprite.png"));
@Cleanup InputStream is = (InputStream) ImageIO.createImageInputStream(finalImg);
finalImg.flush();
FileUtils.writeStringToFile(new File(this.spritePath + "sprite.json"), json.toString());
FileUtils.copyFile(new File(this.spritePath + "sprite.png"), new File(this.spritePath + "sprite@2x.png"));
FileUtils.copyFile(new File(this.spritePath + "sprite.json"), new File(this.spritePath + "sprite@2x.json"));
} catch (IOException e) {
e.printStackTrace();
}
}
}