Java 图片处理:单图与批量生成略缩图教程
135 浏览量
更新于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
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍