public class PictureUtils {
private Logger log = LoggerFactory.getLogger(PictureUtils.class);
@Autowired
private FileStoreConfigure fileStoreConfigure;
public ThumbnaiFile compressedPicture(MultipartFile jobFile, String fileName) {
ThumbnaiFile thumbnaiFile = new ThumbnaiFile();
File file = null;
try {
file = File.createTempFile("tmp", null);
jobFile.transferTo(file);
file.deleteOnExit();
} catch (Exception e) {
e.printStackTrace();
}
int[] results = getImgWidth(file);
int widthdist = (int) (results[0] * 0.1);
int heightdist = (int) (results[1] * 0.1);
thumbnaiFile.setThumbnailWidth(String.valueOf(widthdist));
thumbnaiFile.setThumbnailHeight(String.valueOf(heightdist));
thumbnaiFile.setByteSize(String.valueOf(file.length()));
Image src = null;
try {
src = javax.imageio.ImageIO.read(file);
} catch (IOException e) {
e.printStackTrace();
}
BufferedImage tag = new BufferedImage((int) widthdist,
(int) heightdist, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(
src.getScaledInstance(widthdist, heightdist,
Image.SCALE_SMOOTH), 0, 0, null);
File localFile = tmpLocalSave(tag, fileName);
thumbnaiFile.setFile(localFile);
return thumbnaiFile;
}
private File tmpLocalSave(BufferedImage tag, String fileName) {
FileOutputStream fos = null;
BufferedOutputStream buffStream = null;
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(tag, "JPG", out);
byte[] bytes = out.toByteArray();
String dir = (null != fileStoreConfigure && !StringUtils.isEmpty(fileStoreConfigure.getDir())) ? fileStoreConfigure.getDir() : SystemParameter.FILE_DIR_TMP;
File dirFile = new File(dir);
if(!dirFile.exists()) {
dirFile.mkdir();
}
File dataFile = new File(dir + File.separator + fileName + ".JPG");
fos = new FileOutputStream(dataFile);
buffStream = new BufferedOutputStream(fos);
buffStream.write(bytes);
buffStream.flush();
return dataFile;
} catch (Exception e) {
fileName = StringUtils.isEmpty(fileName) ? "" : fileName;
log.error("文件["+ fileName +"]保存失败,失败原因:" + e.getMessage(),e);
return null;
} finally {
if(null != fos){
try {
fos.close();
} catch (IOException e) {
log.error("关闭文件失败",e);
}
}
if(null != buffStream){
try {
buffStream.close();
} catch (IOException e) {
log.error("关闭文件失败",e);
}
}
}
}
/**
* 获取图片宽度
*
* @param file
* 图片文件
* @return 宽度
*/
public static int[] getImgWidth(File file) {
InputStream is = null;
BufferedImage src = null;
int result[] = { 0, 0 };
try {
is = new FileInputStream(file);
src = javax.imageio.ImageIO.read(is);
result[0] = src.getWidth(null); // 得到源图宽
result[1] = src.getHeight(null); // 得到源图高
is.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
图片压缩
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 引言:太多的图片会增加服务器的压力,而目前用户的手机像素越来越高,图片的体积也越来越大,动则5-10多M,而当项目...
- gulp 是一款 nodejs 应用,用于前端开发过程中对代码进行构建,是自动化项目的构建利器。她不仅能对网站资源...
- 原谅我的抄袭,我只是怕原作者把文件删了,或者别的问题,导致我以后无法查看,所以自己再写一遍源文件链接:http:/...
- 参考来源优设网 图好快(点名字下载) 国内的一款在线网站,除了可以压缩静态图,还可以压缩Gif,还有一系列贴心的小...