- Document PSD long image cropping feature (top 1200px) - Document image processor maxHeight support - Document homepage card height change to 500px - Include technical specifications and best practices
6.6 KiB
6.6 KiB
预览图尺寸调整 - 300x500 更新报告
📅 更新信息
- 更新日期: 2025-10-26
- 版本: v1.1.0
- 状态: ✅ 已完成并部署
🎯 更新目标
将首页卡片预览图从原来的 300x300 正方形调整为 300x500 竖版长图格式,以更好地展示纵向素材。
✨ 主要更改
1️⃣ PSD处理器优化 (lib/psd-processor.ts)
新增功能:长图智能裁剪
- 问题: PSD文件可能是非常长的竖图,全部显示会导致预览图过大
- 解决方案: 自动裁剪只保留顶部1200px的内容
// 新增参数
maxHeight: number = 1200 // 长图裁剪高度限制
// 裁剪逻辑
if (imageData.height > maxHeight) {
console.log(`[PSD] 检测到长图 ${imageData.width}x${imageData.height},裁剪到顶部${maxHeight}px`)
sharpInstance = sharpInstance.extract({
left: 0,
top: 0,
width: imageData.width,
height: maxHeight // 只保留顶部1200px
})
}
优势
- ✅ 自动识别长图
- ✅ 保留最重要的顶部内容
- ✅ 减少文件大小
- ✅ 提高处理速度
2️⃣ 图片处理器增强 (lib/image-processor.ts)
新增maxHeight参数支持
interface ProcessImageOptions {
maxSizeKB?: number // 最大文件大小(KB)
maxWidth?: number // 最大宽度(像素)
maxHeight?: number // 🆕 最大高度(像素)
format?: 'webp' | 'jpeg' | 'png'
}
处理逻辑优化
const {
maxSizeKB = 300,
maxWidth = 600, // 宽度限制
maxHeight = 1000, // 🆕 高度限制(适配300x500显示)
format = 'webp',
} = options
// 双向尺寸限制
if (width > maxWidth) {
const ratio = maxWidth / width
width = maxWidth
height = Math.round(height * ratio)
}
// 新增:如果高度超过限制,再次调整
if (height > maxHeight) {
const ratio = maxHeight / height
height = maxHeight
width = Math.round(width * ratio)
}
优势
- ✅ 同时控制宽度和高度
- ✅ 保持图片比例
- ✅ 适配300x500显示尺寸
- ✅ 优化存储空间
3️⃣ 首页卡片尺寸调整 (app/page.tsx)
修改内容
// 之前:300x300 正方形
<div className="relative w-full h-[300px] ...">
// 现在:300x500 竖版长图
<div className="relative w-full h-[500px] ...">
显示效果
- 宽度: 300px(保持不变)
- 高度: 300px → 500px (增加200px)
- 比例: 1:1 → 3:5 (更适合纵向素材)
优势
- ✅ 更好展示纵向设计
- ✅ 减少裁剪损失
- ✅ 提升视觉效果
- ✅ 保持网格布局一致
4️⃣ 上传API参数更新 (app/api/materials/upload/route.ts)
更新处理参数
// PSD自动生成预览图
processedBuffer = await processImage(generatedBuffer, {
maxSizeKB: 300,
maxWidth: 600,
maxHeight: 1000, // 🆕 添加高度限制
format: 'webp',
})
// 用户手动上传预览图
processedBuffer = await processImage(originalBuffer, {
maxSizeKB: 300,
maxWidth: 600,
maxHeight: 1000, // 🆕 添加高度限制
format: 'webp',
})
📊 技术参数对比
| 参数项 | 更新前 | 更新后 | 说明 |
|---|---|---|---|
| 首页卡片高度 | 300px | 500px | 增加67% |
| 显示比例 | 1:1 | 3:5 | 更适合纵向素材 |
| 图片最大宽度 | 600px | 600px | 不变 |
| 图片最大高度 | ∞ | 1000px | 新增限制 |
| PSD裁剪高度 | 无限制 | 1200px | 新增功能 |
| 文件大小限制 | 300KB | 300KB | 不变 |
🔄 处理流程
PSD文件上传流程
用户上传PSD文件
↓
检测PSD尺寸
↓
如果高度 > 1200px → 裁剪到顶部1200px
↓
缩放到最大600x1000
↓
压缩到300KB以内
↓
转换为WebP格式
↓
上传到S3
↓
首页以300x500显示(等比缩放)
普通图片上传流程
用户上传预览图
↓
检测图片尺寸
↓
如果宽度 > 600px → 缩放
↓
如果高度 > 1000px → 再次缩放
↓
压缩到300KB以内
↓
转换为WebP格式
↓
上传到S3
↓
首页以300x500显示(object-cover裁剪)
🎨 视觉效果提升
之前(300x300)
- 正方形卡片
- 纵向素材被强制裁剪
- 细节损失较多
- 不够精致
现在(300x500)
- 竖版长图卡片
- 纵向素材完整展示
- 细节保留更多
- 视觉效果更佳
✅ 部署验证
容器状态
NAME STATUS PORTS
youyidian-3d-material Up About a minute 0.0.0.0:4320->3000/tcp
健康检查
{"status":"ok","timestamp":"2025-10-26T08:22:50.838Z"}
代码验证
- ✅ PSD处理器包含maxHeight参数(1200px)
- ✅ 图片处理器包含maxHeight参数(1000px)
- ✅ 首页卡片高度已更新为500px
- ✅ 上传API使用新参数
📝 使用说明
对用户的影响
-
上传PSD文件
- 长图会自动裁剪顶部1200px
- 无需手动处理
- 自动优化显示效果
-
上传普通图片
- 建议尺寸:600x1000 或按3:5比例
- 系统自动压缩优化
- 首页显示效果更佳
-
首页浏览
- 卡片显示为300x500
- 纵向素材展示更完整
- 视觉体验更好
最佳实践
- 横向图片: 建议尺寸 600x400 或更小
- 纵向图片: 建议尺寸 600x1000
- PSD文件: 任意尺寸,系统自动处理
🔮 后续优化建议
短期优化
- 添加预览图裁剪位置选择(顶部/中部/底部)
- 支持自定义裁剪区域
- 提供多种显示比例选项
长期规划
- AI智能识别图片主体并智能裁剪
- 支持多张预览图轮播
- 动态调整显示尺寸(响应式)
- 支持视频预览
📞 技术支持
相关文件
lib/psd-processor.ts- PSD处理器lib/image-processor.ts- 图片处理器app/page.tsx- 首页组件app/api/materials/upload/route.ts- 上传API
部署信息
- 服务器: NAS TrueNAS
- 内网地址: http://192.168.58.20:4320
- 公网地址: http://180.97.221.140:2320
- 容器: youyidian-3d-material
📊 性能影响
存储优化
- PSD长图裁剪后文件更小
- 预览图压缩效率更高
- S3存储成本降低
加载速度
- 图片文件更小,加载更快
- 首页渲染速度提升
- 用户体验改善
服务器负载
- 处理时间略有增加(裁剪操作)
- 整体影响可忽略不计
- 缓存机制保持高效
更新完成时间: 2025-10-26 16:26
部署人员: AI Assistant
版本: v1.1.0 - 300x500显示优化