Java实现图片等比例缩略图
2017-06-09 00:00
671 查看
摘要: 如何在Java平台上实现图片的等比例缩略图的生成
实现方式及相关工具使用:
Thumbnailator类库 [size()API]--->推荐
Java AWT类库,根据缩略比例计算缩略图高度和宽度,使用Image类获取原图的缩放版本,使用ImageIo类保存缩略图 [BufferedImage、ImageIo、Graphics]--->了解
工具版本:
Eclipse:eclipse-jee-mars-R-win32-x86_64
JDK:jdk1.8.0_60
具体实现:
1.搭建应用程序框架(使用之前WaterMark的项目开发),首先创建一个项目,这次我们只需要再引入Thumbnailator-0.4.7.jar文件即可
2.首先我们使用第一种实现方式,首先写一个ThumbnailService业务逻辑处理类:
3.然后写ThumbnailAction来接收请求:
4.配置struts.xml文件
5.编写上传文件的thumbnail.jsp6.
6.编写成功页面结果页面showthumbnail.jsp
7.我们开始测试第一种实现方式:
8.由上图可以看到成功通过测试,接下来我们实现另一种方式,添加一个ThumbnailAWTService的类:
9.然后,我们在ThumbnailAction的方法中,修改调用ThumbnailAWTService中的thumbnial()方法,进行测试,经过测试,效果一致!
综上,其实这个只是一个类库的使用,大家需要源码的,可以点击-->https://github.com/xiaoaibin/WaterMark.git
本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!
实现方式及相关工具使用:
Thumbnailator类库 [size()API]--->推荐
Java AWT类库,根据缩略比例计算缩略图高度和宽度,使用Image类获取原图的缩放版本,使用ImageIo类保存缩略图 [BufferedImage、ImageIo、Graphics]--->了解
工具版本:
Eclipse:eclipse-jee-mars-R-win32-x86_64
JDK:jdk1.8.0_60
具体实现:
1.搭建应用程序框架(使用之前WaterMark的项目开发),首先创建一个项目,这次我们只需要再引入Thumbnailator-0.4.7.jar文件即可
2.首先我们使用第一种实现方式,首先写一个ThumbnailService业务逻辑处理类:
package com.watermark.service; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import net.coobird.thumbnailator.Thumbnails; /** * ThumbnailService * 将上传的图进行等比例缩略 * @author aibinxiao * @date 2017年6月9日 上午11:00:46 */ public class ThumbnailService { public static final int WIDTH = 100; public static final int HEIGHT = 100; public String thumbnail(File image, String imageFileName, String uploadPath, String realUploadPath){ String thumFileName = "thum_" + imageFileName; InputStream is =null; try { is = new FileInputStream(image); String des = realUploadPath + File.separator + thumFileName; Thumbnails.of(is).size(WIDTH, HEIGHT).toFile(des); } catch (Exception e) { e.printStackTrace(); } finally { if(is!=null){ try { is.close(); } catch (Exception e2) { e2.printStackTrace(); } } } return uploadPath + File.separator + thumFileName; } }
3.然后写ThumbnailAction来接收请求:
package com.watermark.action; import java.io.File; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import com.watermark.entity.PicInfo; import com.watermark.service.ThumbnailAWTService; import com.watermark.service.ThumbnailService; import com.watermark.service.UploadService; /** * ThumbnailHandler类 * @author aibinxiao * @date 2017年6月9日 上午10:46:51 */ public class ThumbnailAction extends ActionSupport{ private File image; // 要上传的图片文件 private String imageFileName; // 要上传的图片文件名 private String uploadPath; // 要上传的图片文件相对路径 public File getImage() { return image; } public void setImage(File image) { this.image = image; } public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } public String getUploadPath() { return uploadPath; } public void setUploadPath(String uploadPath) { this.uploadPath = uploadPath; } PicInfo picInfo = new PicInfo(); public PicInfo getPicInfo() { return picInfo; } public void setPicInfo(PicInfo picInfo) { this.picInfo = picInfo; } public String thumbnail() throws Exception{ // 绝对路径,是基于我们的相对路径来获取的 String realUploadPath = ServletActionContext.getServletContext().getRealPath(uploadPath); UploadService uploadService = new UploadService(); //ThumbnailAWTService thumbnailAWTService = new ThumbnailAWTService(); ThumbnailService thumbnailService = new ThumbnailService(); // 设置图片上传后返回的相对路径 picInfo.setImageURL(uploadService.uploadImage(image, imageFileName, uploadPath, realUploadPath)); // 设置文字水印 //picInfo.setLogoImageURL(thumbnailAWTService.thumbnail(image, imageFileName, uploadPath, realUploadPath)); picInfo.setLogoImageURL(thumbnailService.thumbnail(image, imageFileName, uploadPath, realUploadPath)); return SUCCESS; } }
4.配置struts.xml文件
<!-- 批获取图片缩略图 --> <action name="thumbnail" class="com.watermark.action.ThumbnailAction" method="thumbnail"> <param name="uploadPath">/images</param> <result name="success">showthumbnail.jsp</result> </action>
5.编写上传文件的thumbnail.jsp6.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>获取缩略图</title> </head> <body> <h4>请选择图片上传</h4> <hr/> <form name = "upload_form" action="${pageContext.request.contextPath}/thumbnail.action" method="post" enctype="multipart/form-data"> <input type="file" name="image" id="image"/><br/> <input type="submit" value="上传图片"/> </form> <hr/> <a href="${pageContext.request.contextPath}/index.jsp">返回首页</a><br/> </body> </html>
6.编写成功页面结果页面showthumbnail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>缩略前后对比</title> </head> <body> <h4>图片信息</h4> <hr/> <table width="100%"> <tr> <td width="50%" align="center"> <img src='${pageContext.request.contextPath}<s:property value="picInfo.imageURL"/>'> </td> <td width="50%" align="center"> <img src='${pageContext.request.contextPath}<s:property value="picInfo.logoImageURL"/>'> </td> </tr> </table> <hr/> <a href="${pageContext.request.contextPath}/index.jsp">返回首页</a><br/> </body> </html>
7.我们开始测试第一种实现方式:
8.由上图可以看到成功通过测试,接下来我们实现另一种方式,添加一个ThumbnailAWTService的类:
package com.watermark.service; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import javax.imageio.ImageIO; /** * Java AWT类库实现缩略图 * @author aibinxiao * @date 2017年6月9日 上午11:16:21 */ public class ThumbnailAWTService { public static final int WIDTH = 100; public static final int HEIGHT = 100; public String thumbnail(File image, String imageFileName, String uploadPath, String realUploadPath){ String thumFileName = "thum_" + imageFileName; OutputStream os = null; try { String des = realUploadPath + File.separator + thumFileName; os = new FileOutputStream(des); Image image2 = ImageIO.read(image); int width = image2.getWidth(null);// 获取原图宽度 int height = image2.getHeight(null);// 获取原图高度 int rate1 = width/WIDTH;// 宽度缩略比例 int rate2 = height/HEIGHT;// 高度缩略比例 int rate = 0; if(rate1 > rate2){// 宽度缩略比例大于高度缩略比例,使用宽度缩略比例 rate = rate1; }else{ rate = rate2; } // 计算缩略图最终的宽度和高度 int newWidth = width/rate; int newHeight = height/rate; // 创建一个缓存图片对象 BufferedImage bufferedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); // 将原图通过新的高度宽度绘制到缓存图片对象中 image.SCALE_SMOOTH平滑版本 bufferedImage.getGraphics().drawImage(image2.getScaledInstance(newWidth, newHeight, image2.SCALE_SMOOTH), 0, 0, null); // "image/jpeg" 获取原图后缀名 //String imageType = image.getName().substring(image.getName().indexOf(".")+1); String imageType = imageFileName.substring(imageFileName.indexOf(".")+1); // 通过ImageIO将生成的缓存图片对象输出到对应的输出文件中去 ImageIO.write(bufferedImage, imageType, os); } catch (Exception e) { e.printStackTrace(); }finally { if(os!=null){ try { os.close(); } catch (Exception e2) { e2.printStackTrace(); } } } return uploadPath + File.separator + thumFileName; } }
9.然后,我们在ThumbnailAction的方法中,修改调用ThumbnailAWTService中的thumbnial()方法,进行测试,经过测试,效果一致!
综上,其实这个只是一个类库的使用,大家需要源码的,可以点击-->https://github.com/xiaoaibin/WaterMark.git
本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!
相关文章推荐
- JAVA实现图片等比例缩略图的实现方式和相关工具
- Java实现图片等比例缩略图
- java实现创建缩略图、伸缩图片比例生成的方法
- Java 实现图片等比例缩略图 (Thumbnailator + Jsp+SpringMVC)
- 在ASP.NET中实现图片上传,并按比例生成缩略图
- java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量
- php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
- Java 缩放图片工具类,创建缩略图、伸缩图片比例
- java实现等比例缩略图
- java实现不同图片居中剪裁生成同一尺寸缩略图
- php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
- php实现上传图片和等比例缩略图压缩图片
- 在ASP.NET中实现上传图片,并按比例生成缩略图
- Java 缩放图片工具类,创建缩略图、伸缩图片比例
- 黄聪:php实现上传图片和等比例缩略图压缩图片
- java生成缩略图,接收图片,按指定宽高或按比例生成缩略图
- java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量
- java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量
- 在ASP.NET中实现上传图片,并按比例生成缩略图
- java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量