Files
Jarvis_java/doc/图片转换功能说明.md
2025-11-03 11:54:11 +08:00

171 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 评论图片WebP转JPG功能说明
## 功能概述
评论模块中的图片如果是webp格式会自动转换为jpg格式。转换后的图片会被缓存下次不需要再次转换。
## 功能特性
1. **自动检测**自动检测图片URL中的webp格式
2. **格式转换**将webp格式图片转换为jpg格式
3. **结果缓存**:转换结果存储在数据库中,避免重复转换
4. **文件存储**转换后的jpg图片保存到本地目录
5. **HTTP访问**通过ImageController提供HTTP访问接口
## 配置说明
`application.yml` 中配置:
```yaml
image:
convert:
# 图片存储路径转换后的jpg图片存储目录
storage-path: ${user.home}/comment-images
# 图片访问基础URL如果配置转换后的图片将通过此URL访问
# 例如: http://your-domain.com/images 或 http://localhost:6666/images
# 如果为空,则返回本地文件路径
base-url: http://localhost:6666/images
```
### 配置项说明
- **storage-path**转换后的jpg图片存储目录默认使用 `${user.home}/comment-images`
- **base-url**图片访问的基础URL如果配置转换后的图片URL将使用此地址如果不配置则返回本地文件路径
## 数据库表
需要执行以下SQL创建图片转换记录表
```sql
-- 执行 sql/image_conversions.sql
```
表结构:
- `id`主键ID
- `original_url`原始webp图片URL唯一索引
- `converted_url`转换后的jpg图片URL或路径
- `converted_at`:转换时间
- `file_size`:文件大小(字节)
- `created_at`:创建时间
## 工作流程
1. **图片URL解析**从评论数据中解析出图片URL列表
2. **格式检测**检查URL中是否包含webp格式标识
3. **缓存查询**:查询数据库,检查是否已转换过
4. **格式转换**(如果未转换过):
- 下载原始webp图片
- 使用webp-imageio库读取webp格式
- 转换为BufferedImage
- 保存为jpg格式到本地目录
- 保存转换记录到数据库
5. **返回结果**返回转换后的图片URL或原URL如果不是webp
## 依赖库
项目已添加以下依赖:
1. **Thumbnailator** (0.4.20):图片处理库
2. **webp-imageio** (0.1.0)WebP格式支持库
## API接口
### 图片访问接口
**GET** `/images/{filename}`
访问转换后的jpg图片文件。
**参数:**
- `filename`文件名通常是MD5值.jpg
**返回:**
- 成功图片文件Content-Type: image/jpeg
- 失败404 Not Found 或 400 Bad Request
**安全特性:**
- 防止路径遍历攻击
- 文件路径验证
- 仅允许访问存储目录内的文件
## 使用示例
### 前端调用
评论生成接口返回的图片URL列表已经过转换处理
```json
{
"list": [
{
"commentText": "评论内容",
"images": [
"http://localhost:6666/images/abc123.jpg",
"http://localhost:6666/images/def456.jpg"
]
}
]
}
```
### 后端调用
图片转换服务会自动集成到评论生成流程中:
```java
// 在 JDInnerController.commentGenerate 方法中
List<String> imageUrls = parsePictureUrls(commentToUse.getPictureUrls());
List<String> convertedImageUrls = imageConvertService.convertImageUrls(imageUrls);
```
## 注意事项
1. **首次转换**首次转换webp图片时需要下载图片并转换可能耗时较长
2. **存储空间**转换后的jpg图片会占用磁盘空间建议定期清理旧文件
3. **网络依赖**:转换过程需要下载原始图片,确保网络连接正常
4. **WebP支持**确保webp-imageio库正确加载否则转换会失败
5. **并发处理**:多个请求同时转换同一张图片时,可能会导致重复转换(建议后续优化为加锁机制)
## 故障排查
### 问题1转换失败提示"无法读取webp图片格式"
**解决方案:**
1. 确认 `webp-imageio` 依赖已正确添加到pom.xml
2. 确认依赖已成功下载检查Maven本地仓库
3. 检查日志中的WebP支持检测信息
### 问题2图片无法访问404
**解决方案:**
1. 检查 `storage-path` 配置是否正确
2. 确认图片文件已成功转换并保存
3. 检查文件权限
4. 如果配置了 `base-url`确认URL是否正确
### 问题3转换后的图片URL是本地路径
**解决方案:**
`application.yml` 中配置 `base-url`
```yaml
image:
convert:
base-url: http://your-domain:6666/images
```
## 性能优化建议
1. **异步转换**:对于大量图片,可以考虑异步转换
2. **CDN加速**将转换后的图片上传到CDN提供更快的访问速度
3. **定期清理**:定期清理长时间未使用的转换图片
4. **缓存预热**:提前转换常用的图片
## 后续优化
1. 添加转换任务队列,支持批量转换
2. 添加转换状态监控和统计
3. 支持其他图片格式转换如png、gif等
4. 添加图片压缩功能,减小文件大小