📖 版本说明
ℹ️ 关于此版本
JmsImage 1.x.x 是框架的初始版本,提供了基础的图片处理能力。虽然此版本已经归档,
但它奠定了 JmsImage 的核心架构和设计理念。建议新用户直接使用
2.x.x 版本。
1.x.x 核心特性
🎯
执行器模式
采用 execute() 方法执行图片处理,链式调用
🔄
撤销/重做
支持 undo() 和 redo() 操作,历史栈管理
🛡️
资源管理
destroy() 方法释放资源,防止内存泄漏
🧩
模块化 Handler
水印、滤镜、压缩等处理器独立封装
🚀 快速开始
第一个 JmsImage 程序
JmsImage image = JmsImage.read("input.png");
image.execute(new ImageWaterMark.BatchAddTextWaterMarkHandler(
"版权所有",
new Color(255, 255, 255, 64),
new Font("微软雅黑", 40),
30,
100,
true
));
image.write("output.jpg");
image.destroy();
✅ 简化版(推荐)
JmsImage.read("input.png")
.execute(new ImageWaterMark.BatchAddTextWaterMarkHandler(...))
.write("output.jpg")
.destroy();
📦 核心 API
1. JmsImage - 图片实体类
JmsImage 是框架的核心类,提供以下主要方法:
| 方法 |
说明 |
示例 |
read(String path) |
从文件路径读取图片 |
JmsImage.read("test.png") |
read(InputStream is) |
从输入流读取图片 |
JmsImage.read(inputStream) |
create(w, h, type) |
创建空白图片 |
JmsImage.create(800, 600, TYPE_INT_RGB) |
execute(handler) |
执行图片处理器 |
image.execute(new DarkColorFilterHandler(true)) |
write(String path) |
保存图片到文件 |
image.write("output.jpg") |
undo() |
撤销一步操作 |
image.undo() |
redo() |
重做一步操作 |
image.redo() |
store() |
还原到原始图片 |
image.store() |
destroy() |
释放资源 |
image.destroy() |
2. 图片处理器(Handlers)
(1)水印处理器 - ImageWaterMark
new RemoveWaterMarkAverageHandler(x, y, width, height, true);
new RemoveWaterMarkBlurImprovedHandler(x, y, width, height, true);
new RemoveWaterMarkSurroundImprovedHandler(x, y, width, height, true);
new RemoveWaterMarkGradientHandler(x, y, width, height, true);
(2)滤镜处理器 - ImageFilter
new DarkColorFilterHandler(true);
new SmallColorFilterHandler(true);
new NegativeFilterHandler(true);
new MosaicFilterHandler(true);
(3)压缩处理器 - ImageCompress
new ProportionCompressHandler(0.5, true);
new QualityCompressHandler(0.8f, true);
(4)基础处理器 - ImageBasicHandlers
new AddNoiseHandler(100, true);
new AddLinesHandler(50, true);
💡 实战场景
场景 1:图片去水印
JmsImage.read("watermarked.png")
.historySwitchOn()
.execute(new RemoveWaterMarkBlurImprovedHandler(
800, 600, 200, 100, true
))
.write("clean.jpg")
.destroy();
场景 2:图片压缩
JmsImage.read("large.png")
.execute(new ProportionCompressHandler(0.5, true))
.execute(new QualityCompressHandler(0.75f, true))
.write("compressed.jpg")
.destroy();
场景 3:图片编辑器(支持撤销)
public class SimpleEditor {
private JmsImage image;
public void load(String path) {
image = JmsImage.read(path).historySwitchOn();
}
public void applyGrayscale() {
image.execute(new DarkColorFilterHandler(true));
}
public void applyNegative() {
image.execute(new NegativeFilterHandler(true));
}
public void undo() {
image.undo();
}
public void save(String path) {
image.write(path);
}
public void close() {
image.destroy();
}
}
⚙️ 高级用法
拦截器:流程控制
image.execute(handler, new HandlerInterceptor() {
@Override
public boolean preHandle(BufferedImage image) {
System.out.println("处理前检查...");
return true;
}
@Override
public BufferedImage postHandle(BufferedImage result) {
System.out.println("处理后优化...");
return result;
}
@Override
public void exceptionHandle(BufferedImage image, Exception e) {
System.out.println("捕获异常:" + e.getMessage());
}
});
日志适配
Logger logger = new LogAdapter<>(slf4jLogger);
image.logInfo(logger, "开始处理图片")
.execute(handler)
.logDebug(logger, "处理完成")
.write("output.jpg")
.destroy();
内部容器机制
ImageContainer container = new ImageContainer(jmsImage);
jmsImage.putImageIntoInternalContainer()
.releaseInternalContainerAndDestroy();
BufferedImage img = container.get();