简单图片文件上传并处理缩略图生成

时间:2021-12-15 20:31:23
第一种,推荐方式,调用api方法,Thumbnailator类库来实现。只需要我们提供的参数即可。这样注意力集中在业务功能上去。
第二种,1.使用java WAT   类库,根据缩略比例计算缩略图高度和宽度。
               2.使用image类获得原图的缩放版本
               3.使用image IO  类保存缩略图,并从服务器路径获得
注意:第二种比较复杂。
对于两种实现方式,有不同的方法,
第一种使用size方法,
第二种,使用BufferedImage来提高压缩性能,并使用imageIO类文件的读入和原图缩略图的生成,并通过Graphics类来绘制图片。

下来我们做一个文件压缩:
1.配置springmvc
 使用springmvc配置文件上传bean,一般配置在application context-mvc.xml中
<bean id= "multipartResolver" class="org.springframwork.web.multipart.commons.CommonsMultipartResolver">
<property name="defalutEncoding" value="utf-8"></property>
<property name="maxUloadSize" vlaue="104857600"></property>
<property name="maxUloadSize" vlaue="104857600"></property>
<property name="maxInMemorySize" vlaue="40960"></property>
</bean>
2.页面中的post表单,提交文件

<form id="upload_form" enctype="multipart/from-data" method="post" action="/url">

<h2>上传图片</h2>

<div>

<input type="file" name="image"  id="image"/>

<input type="submit" vaule="upload"/>

</div>

</form>

3.spring代码中接收文件
文件上传service层:
@service
public  class UploadService{
public String uploadImage(CommonsMultipartFile file,String uploadPath/*相对路径*/,String realUploadPath/*绝对路径*/){
    InputStream is =null;
    OutputStream os =null ;  //输出流
try{
   is=file.getInputStream();//获取输入流信息
 String des=realUploadPath+”/“+file.getOriginalFilename();//获取文件绝对路径
os=new FileOutputStream(des);//获取文件输出流,并指向文件路径
byte[] buffer=new byte[1024]; //1kb大小
int len=0;
  while((len=is.read(buffer))>0){
  os.write(buffer);//只要大于0,就写入到文件中去
}
   }catch(){
}finally{
   if(is!=null){
try{is.close();}catch(){}
}
}//finally
if(os!=null){
try{os.close();}catch(){
}finally{ }
}
return uploadPath+”/“+file.getOriginalFilename();//返回路径

}
3.完成缩略图生成开发
@Service
public class ThumbnailService{
public static final int WIDTH=100; //缩略图宽度
public static final int HEIGHT=100;

public String thumbnail(CommonsMultipartFile,String uploadPath/*相对路径*/,String realUploadPath/*绝对路径*/)
try{
    //调用这个方法设置大小就完成了缩略图的生成
//并且生成到绝对路径中去
String des=realUploadPath+"/thum_"+file.getOriginalFilename();
Thumbnails.of(file.getInputStream()).size(WIDTH,HEIGHT).toFile(des);
}catch(){}

return  uploadPath+”/thum_”+file.getOriginalFilename();//相对路径
}


使用AWT类库生成图片就不说了,基本就是操作 ImageIO,graph来绘图,不建议使用。

使用keepaspectratio(false);可以使用指定图片的大小,而非等比缩略
Thumbnails.of(file.getInputStream()).keepAspectRatio(false).size(with,height).toFile(des);