根据提供的文件信息,我们可以总结出以下关于“Java生成缩略图”的相关知识点: ### Java生成缩略图基础知识 #### 缩略图的概念 缩略图是原始图像的一个较小版本,通常用于网页展示、图片预览等场景。通过生成缩略图可以减少加载时间并节省带宽。 #### 缩略图生成的原理 生成缩略图的核心在于对原始图像进行等比例缩小处理,以保持图像的比例不变。在Java中,主要通过`java.awt.image.BufferedImage`类及其相关方法来实现。 ### Java生成缩略图的技术细节 #### 使用的关键类与方法 - **BufferedImage**: Java标准库中的一个类,提供了基本的图像操作功能。 - **getScaledInstance**: 该方法用于按指定的比例缩放图像。 - **drawImage**: 该方法用于将一个图像绘制到另一个图像上。 #### 示例代码解析 以下是示例代码中涉及的关键部分的详细解析: ```java public class ResizeImage { /** * @param im 原始图像 * @param resizeTimes 缩放比例,例如2表示缩小为原大小的1/2 * @return 缩放后的图像 */ public BufferedImage resizeImage(BufferedImage im, float resizeTimes) { int width = im.getWidth(); // 获取原始图像宽度 int height = im.getHeight(); // 获取原始图像高度 int toWidth = (int)(width / resizeTimes); // 计算目标宽度 int toHeight = (int)(height / resizeTimes); // 计算目标高度 BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB); // 创建新的图像 result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null); // 绘制缩放后的图像 return result; } /** * @param im 原始图像 * @param resizeTimes 缩放比例,如0.5表示缩小一半,0.98表示缩小到原来的98% * @return 缩放后的图像 */ public BufferedImage zoomImage(BufferedImage im, float resizeTimes) { int width = im.getWidth(); // 获取原始图像宽度 int height = im.getHeight(); // 获取原始图像高度 int toWidth = (int)(width * resizeTimes); // 计算目标宽度 int toHeight = (int)(height * resizeTimes); // 计算目标高度 BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB); // 创建新的图像 result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null); // 绘制缩放后的图像 return result; } /** * 读取指定路径下所有指定类型的图像文件,并返回BufferedImage列表 * @param path 需要读取的图像文件夹路径 * @param type 图像类型数组 * @return 包含BufferedImage的列表 * @throws IOException 如果读取过程中出现异常 */ public List<BufferedImage> getImageList(String path, String[] type) throws IOException { Map<String, Boolean> map = new HashMap<>(); for (String s : type) { map.put(s, true); } List<BufferedImage> result = new ArrayList<>(); File[] fileList = new File(path).listFiles(); for (File f : fileList) { if (f.isFile()) { // 检查是否为文件 String fileName = f.getName(); for (String t : type) { if (fileName.endsWith(t)) { // 检查文件后缀名是否符合要求 BufferedImage image = ImageIO.read(f); // 读取图像 result.add(image); // 添加到结果列表 break; } } } } return result; } } ``` #### 代码解析: - `resizeImage`方法接收原始图像和缩放比例作为参数,返回一个按照指定比例缩小的新图像。 - `zoomImage`方法与`resizeImage`类似,不同之处在于它是根据传入的比例放大或缩小图像。 - `getImageList`方法用于读取指定目录下所有指定类型的图像文件,并返回一个包含这些图像的`BufferedImage`列表。 ### 扩展知识点 - **JPEG编码与解码**:示例代码中还涉及到JPEG图像的编码与解码操作,可以通过`com.sun.image.codec.jpeg`包下的类实现。 - **异常处理**:实际开发中还需要考虑异常处理,如文件不存在、无法读取等情况。 - **性能优化**:对于大量图像处理的情况,可以采用多线程技术提高处理效率。 - **兼容性问题**:不同操作系统和Java版本可能会导致兼容性问题,需要注意测试。 以上是对“Java生成缩略图”这一主题的详细解析和技术实现,希望对理解和应用相关技术有所帮助。
对于类型为jpg的图片来说,只需要三个参数就能转化得到自己想要的图片
参数1 存放图片的文件夹
参数2 输出处理后的图片的文件夹
参数3 需要转化的倍数
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.io.File;
import java.io.IOException;
import java.io.FileOutputStream;
import java.util.Map;
/**
* Created by IntelliJ IDEA.
* User: tsaowe
* Date: 11-9-1
* Time: 下午2:12
*/
public class ResizeImage {
/**
* @param im 原始图像
* @param resizeTimes 需要缩小的倍数,缩小2倍为原来的1/2 ,这个数值越大,返回的图片越小
* @return 返回处理后的图像
*/
public BufferedImage resizeImage(BufferedImage im, float resizeTimes) {
/*原始图像的宽度和高度*/
int width = im.getWidth();
int height = im.getHeight();
/*调整后的图片的宽度和高度*/
int toWidth = (int) (Float.parseFloat(String.valueOf(width)) / resizeTimes);
int toHeight = (int) (Float.parseFloat(String.valueOf(height)) / resizeTimes);
/*新生成结果图片*/
BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
return result;
}
/**
* @param im 原始图像
* @param resizeTimes 倍数,比如0.5就是缩小一半,0.98等等double类型
* @return 返回处理后的图像
*/
public BufferedImage zoomImage(BufferedImage im, float resizeTimes) {
/*原始图像的宽度和高度*/
int width = im.getWidth();
剩余5页未读,继续阅读
- zloug2014-04-29不错,挺好
- u0101461882014-07-31找了好久啊,才找到,感谢
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 一款由Java写的射击游戏.zip算法资源
- 一些java的小游戏项目,贪吃蛇啥的.zip用户手册
- 在线实时的斗兽棋游戏,时间赶,粗暴的使用jQuery + websoket 实现实时H5对战游戏 + java.zip课程设计
- HTML5酒店网站模板.zip
- 基于SpringBoot开发的支付系统(包括支付宝支付,微信支付,订单系统).zip
- C基于Qt的学生成绩管理系统.zip毕业设计
- 基于深度卷积神经网络(CNN)模型的图像着色研究与应用系统实现
- Java Web实验报告五:基于JSP的留言本
- Java Web实验报告四:基于AJAX的级联下拉菜单
- springboot洗衣店订单管理系统(代码+数据库+LW)