Java 图片处理:单图与批量生成略缩图教程
119 浏览量
更新于2024-09-02
收藏 53KB PDF 举报
"Java 自动生成略缩图的示例代码和方法"
在开发图库类项目时,处理图片的大小和像素是非常重要的步骤。Java 提供了多种方式来实现图片的缩放,包括生成略缩图。这里我们将讨论如何在 Java 中实现单图和批量生成略缩图的方法。
一、单图生成略缩图
单图生成略缩图的基本思路是读取原图,然后根据指定的比例或固定尺寸重新绘制图像。下面的 Java 代码展示了如何实现这一功能:
```java
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.FileOutputStream;
import java.io.IOException;
import java.util.Map;
public class PicChange {
/
* @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);
// 使用 Graphics2D 进行绘制
Graphics2D g = result.createGraphics();
g.drawImage(im, 0, 0, toWidth, toHeight, null);
g.dispose();
return result;
}
}
```
这段代码中,`resizeImage` 方法接收一个 `BufferedImage` 对象(原始图像)和一个缩小倍数(`resizeTimes`),然后创建一个新的 `BufferedImage` 对象,其尺寸是原始图像按照指定倍数缩小后的尺寸。接着,使用 `Graphics2D` 绘制工具将原始图像绘制到新的图像上,从而实现了图像的缩放。
二、批量生成略缩图
批量生成略缩图通常涉及遍历一个目录下的所有图片文件,并对每一张图片调用上述的单图生成略缩图方法。以下是一个简单的批量处理示例:
```java
public void batchResize(String sourceDir, String targetDir, float resizeTimes) {
File dir = new File(sourceDir);
File[] files = dir.listFiles((d, name) -> name.toLowerCase().endsWith(".jpg") || name.toLowerCase().endsWith(".png"));
if (files != null) {
for (File file : files) {
try {
BufferedImage originalImage = ImageIO.read(file);
BufferedImage resizedImage = resizeImage(originalImage, resizeTimes);
// 保存处理后的图片
String targetPath = targetDir + File.separator + file.getName();
ImageIO.write(resizedImage, "jpg", new File(targetPath));
System.out.println("图片 " + file.getName() + " 缩放完成");
} catch (IOException e) {
System.err.println("处理图片 " + file.getName() + " 时出错:" + e.getMessage());
}
}
} else {
System.out.println("源目录 " + sourceDir + " 无图片文件");
}
}
```
`batchResize` 方法接收源文件夹路径(`sourceDir`)、目标文件夹路径(`targetDir`)和缩放倍数(`resizeTimes`)。它首先找到源文件夹中的所有 `.jpg` 或 `.png` 图片,然后对每张图片进行缩放并保存到目标文件夹中。
请注意,上述代码中使用的 `com.sun` 包在某些 Java 版本或环境中可能不可用,因为它们是非标准的 JDK 扩展。在生产环境中,推荐使用更稳定的第三方库,如 Apache Commons Imaging(前身为 Sanselan)或 ImageMagick 的 Java 接口(如 Java Advanced Imaging - JAI)来处理图像。
总结,Java 中生成略缩图的关键在于理解如何使用 `BufferedImage` 和 `Graphics2D` 进行图像操作,以及如何读写图片文件。对于大批量处理,可以通过循环和文件操作来实现。使用这些技术,开发者可以轻松地创建满足项目需求的图片缩放功能。
233 浏览量
2018-11-09 上传
2021-05-22 上传
点击了解资源详情
点击了解资源详情
2016-10-21 上传
2021-09-30 上传
2019-04-07 上传
点击了解资源详情
weixin_38548434
- 粉丝: 3
- 资源: 945
最新资源
- Domain2Vec:深度域泛化
- Plataforma-Livro-Digital:电子书平台
- 带大家读源码——mybatis generator第一期
- 关于用于引导,控制和测试自主车辆特征和驾驶员响应的数据处理系统的介绍说明.rar
- jjwt-0.9.1.jar中文-英文对照文档.zip
- 学校体育“健康第一”指导思想的发展嬗变研究-论文.zip
- 基于java的-137-net大学生健康管理系统-源码.zip
- ssm框架的校园美食订餐系统源码.zip
- popular_post_scraper
- linky:另一个LInkedIn刮板机..
- MarkdownView-Android.zip
- 基于protues仿真的自动增益放大器纯硬件设计(仿真图、讲解视频、设计要求)
- 机器学习和AI: 数学编程基础篇
- 学习地域文化的收获和意义-论文.zip
- spring-context-support-5.3.10.jar中文-英文对照文档.zip
- 关于用于在车辆排中行驶期间横向控制主车辆的装置和方法的介绍说明.rar