|
|
@@ -34,11 +34,11 @@ class ThumbnailService {
|
|
|
* @param width 目标宽度
|
|
|
* @param height 目标高度
|
|
|
*/
|
|
|
- fun generateThumbnailToStream(relativePath: String, width: Int, height: Int, type: String) { // 构建完整的文件路径
|
|
|
+ fun generateThumbnailToStream(relativePath: String, width: Int, height: Int, scale: Double, type: String) { // 构建完整的文件路径
|
|
|
val fullPath = filePrefix + relativePath
|
|
|
|
|
|
// 构建缩略图文件路径
|
|
|
- val thumbnailPath = buildThumbnailPath(fullPath, width, height, type)
|
|
|
+ val thumbnailPath = buildThumbnailPath(fullPath, width, height, scale, type)
|
|
|
val thumbnailFile = File(thumbnailPath)
|
|
|
|
|
|
// 如果缩略图已存在,直接复制到输出流
|
|
|
@@ -49,17 +49,18 @@ class ThumbnailService {
|
|
|
// 使用配置的质量生成缩略图
|
|
|
val thumbnailBuilder = Thumbnails.of(URL("${minioBaseUrl}${relativePath}")).apply {
|
|
|
when (type) {
|
|
|
- "1" -> this.sourceRegion(Positions.CENTER, width, height)
|
|
|
- "2" -> this.sourceRegion(Positions.TOP_LEFT, width, height)
|
|
|
- "3" -> this.sourceRegion(Positions.TOP_CENTER, width, height)
|
|
|
- "4" -> this.sourceRegion(Positions.TOP_RIGHT, width, height)
|
|
|
- "5" -> this.sourceRegion(Positions.CENTER_LEFT, width, height)
|
|
|
- "6" -> this.sourceRegion(Positions.CENTER_RIGHT, width, height)
|
|
|
- "7" -> this.sourceRegion(Positions.BOTTOM_LEFT, width, height)
|
|
|
- "8" -> this.sourceRegion(Positions.BOTTOM_CENTER, width, height)
|
|
|
- "9" -> this.sourceRegion(Positions.BOTTOM_RIGHT, width, height)
|
|
|
+ "1" -> this.sourceRegion(Positions.CENTER, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "2" -> this.sourceRegion(Positions.TOP_LEFT, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "3" -> this.sourceRegion(Positions.TOP_CENTER, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "4" -> this.sourceRegion(Positions.TOP_RIGHT, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "5" -> this.sourceRegion(Positions.CENTER_LEFT, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "6" -> this.sourceRegion(Positions.CENTER_RIGHT, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "7" -> this.sourceRegion(Positions.BOTTOM_LEFT, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "8" -> this.sourceRegion(Positions.BOTTOM_CENTER, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "9" -> this.sourceRegion(Positions.BOTTOM_RIGHT, width, height).size(width, height).outputFormat("jpg").outputQuality(quality!!)
|
|
|
+ "10" -> this.scale(scale).outputFormat("jpg").outputQuality(quality!!)
|
|
|
}
|
|
|
- }.size(width, height).outputFormat("jpg").outputQuality(quality!!) // 先保存到文件(用于缓存)
|
|
|
+ }
|
|
|
thumbnailBuilder.toFile(thumbnailFile)
|
|
|
}
|
|
|
val context = Context.current()
|
|
|
@@ -70,13 +71,17 @@ class ThumbnailService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- private fun buildThumbnailPath(originalPath: String, width: Int, height: Int, type: String): String {
|
|
|
+ private fun buildThumbnailPath(originalPath: String, width: Int, height: Int, scale: Double, type: String): String {
|
|
|
val file = File(originalPath)
|
|
|
val directory = file.parent
|
|
|
val nameWithoutExt = file.nameWithoutExtension
|
|
|
val extension = "jpg" // 固定为jpg格式
|
|
|
|
|
|
- val thumbnailName = "${nameWithoutExt}_${width}_${height}_${type}.${extension}"
|
|
|
+ val thumbnailName =
|
|
|
+ when (type) {
|
|
|
+ "10" -> "${nameWithoutExt}_${scale}_${type}.${extension}"
|
|
|
+ else -> "${nameWithoutExt}_${width}_${height}_${type}.${extension}"
|
|
|
+ }
|
|
|
return File(directory, thumbnailName).absolutePath
|
|
|
}
|
|
|
|