日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 生成缩略图_Java实现等比例缩略图

發布時間:2024/9/18 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 生成缩略图_Java实现等比例缩略图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介:Web應用為上傳圖片生成縮略圖是常見的基本功能,通過縮略圖生成提高了信息瀏覽時的性能,在保證用戶使用體驗的同時減少了數據傳輸量。

2.實現圖片等比例縮略圖生成,方式及相關工具介紹:

(1)Thumbnailator類庫(推薦)

工具:size()API方法

(2)Java AWT類庫(復雜)

根據縮略比例計算縮略圖高度賀寬度,使用Image類獲得原圖的縮放版本,使用ImageIO類保存縮略圖;

工具:bufferedImage(圖像的存儲和操作);ImageIO(圖片讀入、輸出、生成);Graphics(圖片的繪制)。

本實例是基于springMVC框架的Java web應用程序,允許上傳圖片,并生成圖片的縮略圖。

3.實現步驟

(1)應用程序框架搭建;

(2)上傳文件界面的開發;

(3)控制器開發;

(4)編寫圖片上傳服務類;

(5)編寫縮略圖生成服務類

需要的關鍵壓縮使用的jar包:

搭建web項目目錄:

直接上核心代碼:

控制層controller實現:

@Controller

@RequestMapping("/")public classThumbnailController {

@AutowiredprivateUploadService uploadService;

@AutowiredprivateThumbnailService thumbnailService;

@RequestMapping(value="/thumbnail",method=RequestMethod.POST)public ModelAndView thumbnail(@RequestParam("image") CommonsMultipartFile file,HttpSession session) throwsException{

System.out.println("=========================");//主要針對于圖片上傳//相對路徑

String uploadPath="/images";//圖片在服務器上的絕對路徑信息

String realUploadPath=session.getServletContext().getRealPath(uploadPath);//返回的結果//圖片原圖在服務器上訪問的相對路徑信息

String imageUrl=uploadService.uploadImage(file, uploadPath, realUploadPath);//縮略圖訪問路徑

String thumImageUrl=thumbnailService.thumbnail(file, uploadPath, realUploadPath);//設置返回前端顯示(渲染)

ModelAndView modelAndView=newModelAndView();

modelAndView.addObject("imageURL", imageUrl);

modelAndView.addObject("thumImageURL", thumImageUrl);

modelAndView.setViewName("thumbnail");returnmodelAndView;

}

}

文件上傳的業務實現類,代碼(service):

/*** 文件上傳文件的處理*/@Servicepublic classUploadService {publicString uploadImage(CommonsMultipartFile file,String uploadPath,String realUploadPath){

InputStream iStream=null;

OutputStream oStream=null;try{//獲取上傳文件的流文件

iStream=file.getInputStream();//創建文件輸出流與位置

String des=realUploadPath+"/"+file.getOriginalFilename();

oStream=newFileOutputStream(des);byte[] buffer=new byte[1024];while (iStream.read(buffer)>0) {

oStream.write(buffer);

}

}catch(Exception e) {

e.printStackTrace();

}finally{if(iStream!=null){try{

iStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}if(oStream!=null){try{

oStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}//返回文件上傳的相對路徑

return uploadPath+"/"+file.getOriginalFilename();

}

}

圖片縮略處理,實現方式:

(1)Thumbnails圖片縮略處理,代碼如下:

/*** Thumbnails圖片縮略處理*/@Servicepublic classThumbnailService {public static final int WIDTH=100;public static final int HEIGHT=100;publicString thumbnail(CommonsMultipartFile file,String uploadPath,String realUploadPath){try{

String des=realUploadPath+"/thum_"+file.getOriginalFilename();//圖片縮略圖實現,強制按照指定的寬高進行縮略keepAspectRatio(false)

//方式一//Thumbnails.of(file.getInputStream()).size(WIDTH, HEIGHT).toFile(des);

//方式二

Builder extends InputStream> thumbnail =Thumbnails.of(file.getInputStream());

thumbnail.size(WIDTH, HEIGHT);

thumbnail.toFile(des);

}catch(Exception e) {

e.printStackTrace();

}//縮略圖返回的相對路徑

return uploadPath+"/thum_"+file.getOriginalFilename();

}

}

(2)AWT圖片縮略處理,代碼如下:

/*** AWT圖片縮略處理*/@Servicepublic classAWTService {public static final int WIDTH=100;public static final int HEIGHT=100;publicString thumbnail(CommonsMultipartFile file,String uploadPath,String realUploadPath){

OutputStream oStream=null;try{

String des=realUploadPath+"/thum_"+file.getOriginalFilename();

oStream=newFileOutputStream(des);//ImageIO獲取圖片流信息

Image image=ImageIO.read(file.getInputStream());int width=image.getWidth(null); //獲取原圖寬度

int height=image.getHeight(null);//獲取原圖高度

int wrate=width/WIDTH; //寬度縮略圖

int hrate=height/HEIGHT;//高度縮略圖

int rate=0;if (wrate>hrate) {//寬度縮略圖比例大于高度縮略圖,使用寬度縮略圖

rate=wrate;

}else{

rate=hrate;

}//計算縮略圖最終的寬度和高度

int newWidth=width/rate;int newHeight=height/rate;

BufferedImage bufferedImage=newBufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);//圖片縮略圖實現

bufferedImage.getGraphics().drawImage(image.getScaledInstance(newWidth, newHeight, image.SCALE_SMOOTH), 0, 0, null);//*image/jpeg

String imageType=file.getContentType().substring(file.getContentType().indexOf("/")+1);

ImageIO.write(bufferedImage, imageType, oStream);

}catch(Exception e) {

e.printStackTrace();

}finally{try{

oStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}//縮略圖返回的相對路徑

return uploadPath+"/thum_"+file.getOriginalFilename();

}

}

配置信息一,web容器配置,web.xml:

ImageCompress

springmvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring-mvc.xml

1

springmvc

/

index.jsp

配置信息二,springmvc容器配置,spring-mvc.xml:

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd">

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java 生成缩略图_Java实现等比例缩略图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。