摘要:時間年月日星期六說明本文部分內容均來自慕課網。可以更加專注于業務邏輯開發,縮短項目開發周期,提高項目開發速度。
時間:2017年07月15日星期六
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學源碼:無
學習源碼:https://github.com/zccodere/s...
在用戶進行信息概略瀏覽的時候,提供縮略圖
提升程序性能 提升程序效率
課程內容
Java圖片等比縮略圖實現方式介紹 課程項目案例介紹 實現圖片等比縮略圖的生成1-2 實現方式
實現方式
Thumbnailator類庫: 推薦使用 size()API方法 Java AWT類庫: 根據縮略比例計算縮略圖高度和寬度 使用Image類獲得原圖的縮放版本 使用ImageIO類保存縮略圖 BufferedImage類 ImageIO類 Graphics類第二章:案例介紹 2-1 案例介紹
案例介紹
基于springmvc框架的Java Web應用程序,允許上傳圖片,并生成圖片的縮略圖
效果示意圖
第三章:案例實現 3-1 框架搭建個人學習時,使用springboot+freemaker+mavem搭建,POM文件如下
4.0.0 com.myimooc thumbnail 0.0.1-SNAPSHOT jar thumbnail http://maven.apache.org org.springframework.boot spring-boot-starter-parent 1.5.1.RELEASE UTF-8 UTF-8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-freemarker commons-io commons-io 2.5 net.coobird thumbnailator 0.4.8 org.apache.maven.plugins maven-compiler-plugin 1.8
項目層級結構如下
3-2 上傳頁面開發代碼演示:
上傳文件 圖片上傳
代碼演示:
package com.myimooc.thumbnail.controller; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import com.myimooc.thumbnail.service.ThumbnailService; import com.myimooc.thumbnail.service.UploadService; /** * Thumbnail 控制器類 * @author ZhangCheng on 2017-07-19 * */ @Controller @RequestMapping("/") public class ThumbnailController { private static Logger logger = LoggerFactory.getLogger(ThumbnailController.class); @Autowired private UploadService uploadService; @Autowired private ThumbnailService thumbnailService; @PostMapping("thumbnail") public ModelAndView thumbnail(MultipartFile image,HttpServletRequest request){ ModelAndView mav = new ModelAndView(); String uploadPath = "static/images/"; String realUploadPath = getClass().getClassLoader().getResource(uploadPath).getPath(); logger.info("上傳相對目錄:{}",uploadPath); logger.info("上傳絕對目錄:{}",uploadPath); String imageUrl = uploadService.uploadImage(image, uploadPath, realUploadPath); String thumImageUrl = thumbnailService.thumbnail(image, uploadPath, realUploadPath); mav.addObject("imageURL", imageUrl); mav.addObject("thumImageUrl", thumImageUrl); mav.setViewName("thumbnail"); return mav; } }3-4 圖片上傳服務類開發
代碼演示:
package com.myimooc.thumbnail.service; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; /** * 圖片上傳服務類 * @author ZhangCheng on 2017-07-19 * */ @Service public class UploadService { private static Logger logger = LoggerFactory.getLogger(UploadService.class); public String uploadImage(MultipartFile file,String uploadPath,String realUploadPath){ logger.info("上傳的相對路徑:{}",uploadPath); logger.info("上傳的絕對路徑:{}",realUploadPath); String filePath = realUploadPath + file.getOriginalFilename(); try { File targetFile=new File(filePath); logger.info("將圖片寫入文件:"+ filePath); FileUtils.writeByteArrayToFile(targetFile, file.getBytes()); } catch (IOException e) { logger.info("圖片寫入失敗"); e.printStackTrace(); } return uploadPath + "/" + file.getOriginalFilename(); } }3-5 縮略圖生成服務類開發
代碼演示:
package com.myimooc.thumbnail.service; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import net.coobird.thumbnailator.Thumbnails; /** * 縮略圖服務類 * @author ZhangCheng on 2017-07-19 * */ @Service public class ThumbnailService { public static final int WIDTH = 100; public static final int HEIGHT = 100; public String thumbnail(MultipartFile file,String uploadPath,String realUploadPath){ try{ String des = realUploadPath + "/thum_" + file.getOriginalFilename(); Thumbnails.of(file.getInputStream()).size(WIDTH, HEIGHT).toFile(des); }catch (Exception e) { e.printStackTrace(); } return uploadPath + "/thum_" + file.getOriginalFilename(); } }3-6 AWT服務類講解
代碼演示:
package com.myimooc.thumbnail.service; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; /** * 縮略圖服務類 * * @author ZhangCheng on 2017-07-19 * */ @Service public class ThumbnailAWTService { public static final int WIDTH = 100; public static final int HEIGHT = 100; @SuppressWarnings("static-access") public String thumbnail(MultipartFile file, String uploadPath, String realUploadPath) { OutputStream os = null; try { String des = realUploadPath + "/thum_" + file.getOriginalFilename(); os = new FileOutputStream(des); Image image = ImageIO.read(file.getInputStream()); int width = image.getWidth(null);// 原圖狂寬度 int height = image.getHeight(null);// 原圖高度 int rateWidth = width / WIDTH;// 寬度縮略比例 int rateHeight = height / HEIGHT;// 高度縮略比 // 寬度縮略比例大于高度縮略比例,使用寬度縮略比例 int rate = rateWidth > rateHeight ? rateWidth : rateHeight; // 計算縮略圖最終的寬度和高度 int newWidth = width / rate; int newHeight = height / rate; BufferedImage bufferedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); bufferedImage.getGraphics().drawImage(image.getScaledInstance(newWidth, newHeight, image.SCALE_SMOOTH), 0, 0, null); String imageType = file.getContentType().substring(file.getContentType().indexOf("/") + 1); ImageIO.write(bufferedImage, imageType, os); } catch (Exception e) { e.printStackTrace(); } finally { if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } return uploadPath + "/thum_" + file.getOriginalFilename(); } }3-7 展示頁面開發
代碼演示:
處理結果 操作結果
效果演示:
啟動項目,訪問主頁
點擊選擇圖片
點擊上傳,結果顯示如下
第四章:課程總結 4-1 課程總結通過使用開源組件,可以很方便的實現自己需要的功能。可以更加專注于業務邏輯開發,縮短項目開發周期,提高項目開發速度。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67450.html
時間:2017年07月09日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 課程概述 主要內容 驗證碼歷史 課程內容 不同方案對比 設計與實現 總結 1-2 驗證碼歷史 驗證碼歷史 無驗證碼:垃圾騷擾 Luis von Ahn:Captcha 不斷...
時間:2017年08月27日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github.com/zccodere/s... 第一章:單例模式簡介 1-1 簡介 單例模式 概念及應用場合 餓漢模式 懶漢模式 餓漢模式與懶漢模式的區別 什么是設計模式 是一套被反...
摘要:時間年月日星期五說明本文部分內容均來自慕課網。線性堆疊式二維碼示意圖矩陣式二維碼在一個矩形空間通過黑白像素在矩陣中的不同分布進行編碼。 時間:2017年06月23日星期五說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccodere/s... 第一章:二維碼的概念 1-1 二維碼概述...
摘要:時間年月日星期日說明本文部分內容均來自慕課網。用戶可以在服務器端調用云存儲云檢索從而構建自己的存儲和檢索服務,甚至可以制作自己的數據管理臺。 時間:2017年08月13日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:云圖產品介紹 1-1 云圖產品介紹...
摘要:時間年月日星期日說明本文部分內容均來自慕課網。用戶可以在服務器端調用云存儲云檢索從而構建自己的存儲和檢索服務,甚至可以制作自己的數據管理臺。 時間:2017年08月13日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:云圖產品介紹 1-1 云圖產品介紹...
閱讀 1599·2021-11-22 09:34
閱讀 1690·2019-08-29 16:36
閱讀 2668·2019-08-29 15:43
閱讀 3113·2019-08-29 13:57
閱讀 1297·2019-08-28 18:05
閱讀 1874·2019-08-26 18:26
閱讀 3242·2019-08-26 10:39
閱讀 3454·2019-08-23 18:40