java实现上传图片并压缩图片大小功能
Thumbnailator是一个优秀的图片处理的Google开源Java类库。处理效果远比JavaAPI的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。还支持对一个目录的所有图片进行批量处理操作。
支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。
另外值得一提的是,Thumbnailator至今仍不断更新,怎么样,感觉很有保障吧!
下面我们介绍下如何使用Thumbnailator
使用介绍地址:
利用Thumbnailator轻松实现图片缩放、旋转与加水印
Java图片处理开源框架Thumbnailator
缩略图压缩文件jar包
net.coobird thumbnailator 0.4.8
按指定大小把图片进行缩放(会遵循原图高宽比例)
//按指定大小把图片进行缩和放(会遵循原图高宽比例) //此处把图片压成400×500的缩略图 Thumbnails.of(fromPic).size(400,500).toFile(toPic); //变为400*300,遵循原图比例缩或放到400*某个高度
按照指定比例进行缩小和放大
//按照比例进行缩小和放大 Thumbnails.of(fromPic).scale(0.2f).toFile(toPic);//按比例缩小 Thumbnails.of(fromPic).scale(2f);//按比例放大
图片尺寸不变,压缩图片文件大小
//图片尺寸不变,压缩图片文件大小outputQuality实现,参数1为最高质量 Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);
我这里只使用了图片尺寸不变,压缩文件大小源码
/** * *@Description:保存图片并且生成缩略图 *@paramimageFile图片文件 *@paramrequest请求对象 *@paramuploadPath上传目录 *@return */ publicstaticBaseResultuploadFileAndCreateThumbnail(MultipartFileimageFile,HttpServletRequestrequest,StringuploadPath){ if(imageFile==null){ returnnewBaseResult(false,"imageFile不能为空"); } if(imageFile.getSize()>=10*1024*1024) { returnnewBaseResult(false,"文件不能大于10M"); } Stringuuid=UUID.randomUUID().toString(); StringfileDirectory=CommonDateUtils.date2string(newDate(),CommonDateUtils.YYYY_MM_DD); //拼接后台文件名称 StringpathName=fileDirectory+File.separator+uuid+"." +FilenameUtils.getExtension(imageFile.getOriginalFilename()); //构建保存文件路劲 //2016-5-6yangkang修改上传路径为服务器上 StringrealPath=request.getServletContext().getRealPath("uploadPath"); //获取服务器绝对路径linux服务器地址获取当前使用的配置文件配置 //StringurlString=PropertiesUtil.getInstance().getSysPro("uploadPath"); //拼接文件路劲 StringfilePathName=realPath+File.separator+pathName; log.info("图片上传路径:"+filePathName); //判断文件保存是否存在 Filefile=newFile(filePathName); if(file.getParentFile()!=null||!file.getParentFile().isDirectory()){ //创建文件 file.getParentFile().mkdirs(); } InputStreaminputStream=null; FileOutputStreamfileOutputStream=null; try{ inputStream=imageFile.getInputStream(); fileOutputStream=newFileOutputStream(file); //写出文件 //2016-05-12yangkang改为增加缓存 //IOUtils.copy(inputStream,fileOutputStream); byte[]buffer=newbyte[2048]; IOUtils.copyLarge(inputStream,fileOutputStream,buffer); buffer=null; }catch(IOExceptione){ filePathName=null; returnnewBaseResult(false,"操作失败",e.getMessage()); }finally{ try{ if(inputStream!=null){ inputStream.close(); } if(fileOutputStream!=null){ fileOutputStream.flush(); fileOutputStream.close(); } }catch(IOExceptione){ filePathName=null; returnnewBaseResult(false,"操作失败",e.getMessage()); } } //StringfileId=FastDFSClient.uploadFile(file,filePathName); /** *缩略图begin */ //拼接后台文件名称 StringthumbnailPathName=fileDirectory+File.separator+uuid+"small." +FilenameUtils.getExtension(imageFile.getOriginalFilename()); //addedbyyangkang2016-3-30去掉后缀中包含的.png字符串 if(thumbnailPathName.contains(".png")){ thumbnailPathName=thumbnailPathName.replace(".png",".jpg"); } longsize=imageFile.getSize(); doublescale=1.0d; if(size>=200*1024){ if(size>0){ scale=(200*1024f)/size; } } //拼接文件路劲 StringthumbnailFilePathName=realPath+File.separator+thumbnailPathName; try{ //addedbychenshun2016-3-22注释掉之前长宽的方式,改用大小 //Thumbnails.of(filePathName).size(width,height).toFile(thumbnailFilePathName); if(size<200*1024){ Thumbnails.of(filePathName).scale(1f).outputFormat("jpg").toFile(thumbnailFilePathName); }else{ Thumbnails.of(filePathName).scale(1f).outputQuality(scale).outputFormat("jpg").toFile(thumbnailFilePathName); } }catch(Exceptione1){ returnnewBaseResult(false,"操作失败",e1.getMessage()); } /** *缩略图end */ Mapmap=newHashMap (); //原图地址 map.put("originalUrl",pathName); //缩略图地址 map.put("thumbnailUrl",thumbnailPathName); returnnewBaseResult(true,"操作成功",map); }
获取当前使用的配置文件信息
/** *根据key从gzt.properties配置文件获取配置信息 *@paramkey键值 *@return */ publicStringgetSysPro(Stringkey){ returngetSysPro(key,null); } /** *根据key从gzt.properties配置文件获取配置信息 *@paramkey键值 *@paramdefaultValue默认值 *@return */ publicStringgetSysPro(Stringkey,StringdefaultValue){ returngetValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties",key,defaultValue); }
例:
//获取服务器绝对路径linux服务器地址 StringurlString=PropertiesUtil.getInstance().getSysPro("uploadPath");
PropertiesUtil类
packagecom.xyz.imageserver.common.properties; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.util.Properties; importjava.util.concurrent.ConcurrentHashMap; /** * *@ClassNamePropertiesUtil.java *@Description系统配置工具类 *@authorcaijy *@date2015年6月9日上午10:50:38 *@version1.0.0 */ publicclassPropertiesUtil{ privateLoggerlogger=LoggerFactory.getLogger(PropertiesUtil.class); privateConcurrentHashMapproMap; privatePropertiesUtil(){ proMap=newConcurrentHashMap (); } privatestaticPropertiesUtilinstance=newPropertiesUtil(); /** *获取单例对象 *@return */ publicstaticPropertiesUtilgetInstance() { returninstance; } /** *根据key从gzt.properties配置文件获取配置信息 *@paramkey键值 *@return */ publicStringgetSysPro(Stringkey){ returngetSysPro(key,null); } /** *根据key从gzt.properties配置文件获取配置信息 *@paramkey键值 *@paramdefaultValue默认值 *@return */ publicStringgetSysPro(Stringkey,StringdefaultValue){ returngetValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties",key,defaultValue); } /** *从配置文件中获取对应key值 *@paramfileName配置文件名 *@paramkeykey值 *@paramdefaultValue默认值 *@return */ publicStringgetValue(StringfileName,Stringkey,StringdefaultValue){ Stringval=null; Propertiesproperties=proMap.get(fileName); if(properties==null){ InputStreaminputStream=PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName); try{ properties=newProperties(); properties.load(newInputStreamReader(inputStream,"UTF-8")); proMap.put(fileName,properties); val=properties.getProperty(key,defaultValue); }catch(IOExceptione){ logger.error("getValue",e); }finally{ try{ if(inputStream!=null){ inputStream.close(); } }catch(IOExceptione1){ logger.error(e1.toString()); } } }else{ val=properties.getProperty(key,defaultValue); } returnval; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。